round()函数的文档指出,向它传递一个数字,小数点后的位置进行四舍五入。因此,它应该这样做:
n = 5.59
round(n, 1) # 5.6
但是,在现实中,古老的浮点怪癖悄然而至,你会得到:
5.5999999999999996
出于UI的目的,我需要显示5.6
。我在互联网上浏览了一下,发现一些documentation依赖于我的Python实现。不幸的是,在我的Windows dev机器和我尝试过的每台Linux服务器上都会发生这种情况。See here also。
除了创建我自己的圆形库之外,还有什么方法可以解决这个问题吗?
发布于 2008-09-11 15:11:41
我无法控制它的存储方式,但至少格式化是正确的:
'%.1f' % round(n, 1) # Gives you '5.6'
发布于 2008-09-11 15:14:22
即使不需要舍入,格式化也能正常工作:
"%.1f" % n
发布于 2013-03-14 07:48:34
如果你使用Decimal模块,你可以在不使用'round‘函数的情况下进行近似。下面是我用来进行舍入的代码,尤其是在编写货币应用程序时:
from decimal import Decimal, ROUND_UP
Decimal(str(16.2)).quantize(Decimal('.01'), rounding=ROUND_UP)
这将返回一个为16.20的十进制数。
https://stackoverflow.com/questions/56820
复制相似问题