This question already has answers here:
Is floating point math broken?

(30 个回答)


5 个月前关闭。



printf("%.1f, %.2f", 1.45, 1.445);
输出

1.45 被切片但 1.445 被四舍五入。
我找到了这个,
Why printf round floating point numbers?
这解释了规范建议对 float 进行舍入。
编辑:
我使用 VS2017(在 C++ 项目中)和 Dev-C 对其进行了测试。

最佳答案

[编辑:我最初没有将它们打印到足够荒谬的精度水平,所以答案给出了结果背后的错误推理。]
如果您将它们打印到可笑的精确度,真相就会浮出水面:

#include <stdio.h>
printf("%20.20f, %20.20f", 1.45, 1.445);
结果:
1.44999999999999995559, 1.44500000000000006217
因此,转换后,1.45 最终会比 1.45 小一点,而 1.445 最终会稍微大于 1.445。
所以,当然,当我们取整 1.45 时,它会向下取整,但是当我们取整 1.445 时,它会向上取整。

10-08 18:58