【问题标题】:rounding float up $.01 in python在python中四舍五入浮动$ .01
【发布时间】:2012-02-05 13:48:16
【问题描述】:

我正在开发一个将数字存储为浮点数的程序,我最终将其作为货币写入文件。我目前正在使用 round() 函数将其四舍五入到小数点后 2 位,但无论小数点后三位是多少,业务领域都希望我四舍五入到下一个便士。例如:

x = 39.142

在这种情况下,我试图将 x 舍入到 39.15。显然,当我做圆形功能时,我得到 39.14...

>>> round(x, 2)
    39.14

有没有一种方法可以让我总是四舍五入到下一分钱?我应该提到我正在处理的数字作为货币打印到文件中。

【问题讨论】:

  • 如果是货币,请不要使用浮点数。这只是自找麻烦。当然可以,但麻烦多于其价值。
  • @LanceCollins:您选择的答案大错特错。见我的 cmets。

标签: python floating-point currency rounding


【解决方案1】:

使用decimal module

import decimal
D = decimal.Decimal
cent = D('0.01')

x = D('39.142')
print(x.quantize(cent,rounding=decimal.ROUND_UP))
# 39.15

小数有许多舍入选项。选项及其含义可以在here找到。

【讨论】:

  • +1 这应该是公认的答案。蒂姆的应该被删除。
【解决方案2】:

如果你想用美分写,你可以使用 int(x*100+.5) 从浮点数中获取美分整数。

【讨论】:

    【解决方案3】:

    这很晚,但如果有人想要 Python 3 中的简单单行:

    import math
    
    x_rounded = math.ceil(x*100) / 100
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      相关资源
      最近更新 更多