【发布时间】:2013-07-02 19:04:51
【问题描述】:
在C语言中,如果我们执行以下代码:
float a = 0.7;
if (a < 0.7)
{
printf("Less");
}
else
{
printf("no");
}
上面的代码打印出“Less”。
但是如果我们执行下面的代码:
float a = 1.7;
if (a < 1.7)
{
printf("Less");
}
else
{
printf("no");
}
它打印“否”。
这是什么原因? float 数据类型是如何工作的?
【问题讨论】:
-
您可能想要查找“浮点舍入错误” - 关于这些问题的大量文章 :-)
-
As you can see here,它在 C++11 中的打印也更少。请参阅 Luchian 的链接了解原因。
-
如果你真的想比较浮动文字,请在其后添加 F,如 23.6F。
-
like= 100/3 = 33.3333...... 同样,当您将
0.7转换为二进制时,您将获得0,1的无限(或长)序列,即原因是四字节float.7f!= 八字节double0.7。请记住,无后缀的浮点文字是双精度的,舍入意味着即使是小的文本在舍入为浮点和双精度时也可以采用不同的值。