如何在 5 上舍入一个浮点数 [重复]

Posted

技术标签:

【中文标题】如何在 5 上舍入一个浮点数 [重复]【英文标题】:How to round a float up on 5 [duplicate] 【发布时间】:2015-04-28 17:43:11 【问题描述】:

所以我很惊讶我没有找到任何关于此的信息。

我有一个测试 C++ 程序的 python 脚本。它需要以与std::setprecision 相同的方式格式化浮点数。这是一个像 1.265 这样的浮点数,应该向上舍入到 1.27 (2 dp)。

现在我有以下代码: ":.2f".format(myFloat)

问题是像 1.265 这样的数字被四舍五入到 1.26,我的测试失败了。 setprecision 将 1.265 舍入到 1.27。 解决此问题的最佳方法是什么?

【问题讨论】:

加 0.005 并向下舍入与将 1.265 向上舍入到 1.27 具有相同的行为。 @JeffJohnson 谢谢,将其发布为答案! 有趣的事实:1.265 不能表示为有限数量的 2 的幂的总和,因此它不能用浮点数精确表示。最有可能的是,它实际上存储为 1.2649999999999999023003738329862244427204132080078125,当然会向下舍入到 1.26。 最好的解决方案是使用Decimal 模块而不是二进制算术。您不能依赖尾随的 5 真正成为最后的十进制数字。 【参考方案1】:

您可以使用双舍入来克服二进制算术无法准确表示十进制值的问题。

round(round(1.265, 3) + 0.0005, 2)

【讨论】:

以上是关于如何在 5 上舍入一个浮点数 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在PHP中舍入浮点数?

用 f 字符串舍入浮点数 [重复]

如何舍入一个浮点数?

带有浮点数的 Mod 给出错误的结果 [重复]

舍入浮点数的源代码

C中的printf如何对浮点数进行舍入?