为什么这个程序没有为float和double数据类型提供输出。但是,当用for循环替换相同的代码时会产生什么结果?
# include <stdio.h>
int main()
{
float x=1.1;
while (x==1.1)
{
printf("%f\n",x);
x=x-0.1;
}
return 0;
}
答案 0 :(得分:7)
float x=1.1;
while (x==1.1)
float和double变量不能存储1.1的精确值,只是非常接近的近似值。由于精度的不同,float和double中的确切值会略有不同。
1.1是 double 值。您将1.1作为double存储到float中,稍微改变该值。然后你将它与双值1.1进行比较,这样它就不会完全相等,所以永远不会进入你的状态。
为此,您需要编写1.1f以确保您在任何地方使用相同的数据类型。 此外,我相信其他人会解释为什么比较浮点值以获得精确相等通常是一个坏主意。