为什么printf输出浮动1.45保留一位小数,而1.445保留两位小数在不同的行为中?

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

输出

1.4、1.45

1.45 被切片但 1.445 被四舍五入。

我发现了这个,
为什么 printf 舍入浮点数?
这解释了规范建议对浮动进行四舍五入。

编辑:我使用 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 时,它会向上取整。


以上是为什么printf输出浮动1.45保留一位小数,而1.445保留两位小数在不同的行为中?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>