以下是if和else的程序
#include<stdio.h>
#include<conio.h>
int main()
{
float a = 0.7; //a declared as float variable
if(a == 0.7) //why it takes only integral part of 0.7
{
printf("Hi");
}
else
{
printf("hello");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这个程序不应该显示Hi而不是hello0.7等于0.7吗?
(我是C编程的新手)
注意
float a = 0.7;
Run Code Online (Sandbox Code Playgroud)
将double值转换0.7为a float然后
if(a == 0.7)
Run Code Online (Sandbox Code Playgroud)
转换a为double.
由于0.7无法在浮点中精确表示,因此float和double表示形式并不完全相同.
您可以强制编译器保持float这样状态
#include<stdio.h>
int main()
{
float a = 0.7f;
if(a == 0.7f)
{
printf("Hi");
}
else
{
printf("hello");
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在程序打印"Hi",因为它正在比较喜欢.
更一般地说,您必须非常警惕浮点比较的平等性
#include<stdio.h>
int main()
{
double d = 2.1;
d /= 3.0;
if(d == 0.7) {
puts("Equal");
}
else {
puts("Unequal");
}
printf("%.17f\n", d);
printf("%.17f\n", 0.7);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
程序输出
Unequal 0.70000000000000007 0.69999999999999996