下面是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;
}
此程序是否应显示Hi
而不是hello
,因为0.7等于0.7?
(我是C编程的新手)
答案 0 :(得分:6)
请注意
float a = 0.7;
将double
值0.7
转换为float
,然后
if(a == 0.7)
将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;
}
现在该程序打印“ Hi”,因为它与like进行比较。
通常,您必须非常警惕浮点数比较是否相等
#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;
}
程序输出
Unequal 0.70000000000000007 0.69999999999999996
答案 1 :(得分:1)
如果您将 a 的数据类型更改为 double ,它将打印出嗨, 这是因为浮点常量存储在 double 中,非浮点常量存储在 long 中, double精度较高,float精度较低,double值存储在64位二进制文件中,float值存储在32位二进制文件中,如果您看到浮点数转换为二进制转换的方法,则将完全清楚。