在Python中将浮点数四舍五入到0.01的倍数

5

我正在开发一个程序,将数字存储为浮点数,并最终以货币形式写入文件。目前我正在使用round()函数将其舍入到小数点后两位,但业务部门希望我无论第三位小数是什么都将其舍入到下一分钱。例如:

x = 39.142

在这种情况下,我试图使x四舍五入到39.15。显然,当我使用round函数时,结果是39.14...

>>> round(x, 2)
    39.14

有没有一种方法可以始终将金额向上舍入到下一分钱?我应该提到,我处理的数字以货币形式打印到文件中。

4
如果涉及货币,请勿使用浮点数进行操作。这种做法很容易出问题。虽然可以做到,但不值得麻烦。 - harold
2
@LanceCollins:你选择的答案完全错误。请看我的评论。 - John Machin
3个回答

15

使用decimal模块

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

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

十进制数有很多舍入选项,这些选项及其含义可以在此处找到。


+1 这应该被接受的答案。Tim 的应该被删除。 - John Machin

1

如果你想以美分为单位编写代码,你可以使用 int(x*100+.5) 将浮点型的美元转换为整型的美分。


0
很晚才看到这个问题,但如果有人想要一个简单的一行Python 3代码,请看下面:
import math

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接