为什么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 时,它会向上取整。
THE END
二维码