【问题标题】:How to round a float up on 5 [duplicate]如何在 5 上舍入一个浮点数 [重复]
【发布时间】: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 真正成为最后的十进制数字。

标签: python c++ python-2.7 rounding


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多