round()似乎未正确舍入

2024-04-19 23:33:18 发布

您现在位置:Python中文网/ 问答频道 /正文

函数round()的文档说明您向它传递一个数字,并将小数点后的位置舍入。因此,它应该执行以下操作:

n = 5.59
round(n, 1) # 5.6

但是,事实上,好的旧的浮点运算怪癖潜入你会得到:

5.5999999999999996

出于UI的目的,我需要显示5.6。我浏览了一下互联网,发现有些documentation依赖于我的Python实现。不幸的是,这发生在我的Windows开发机器和我尝试过的每台Linux服务器上。See here also

除了建立我自己的圆形图书馆,有什么办法可以解决这个问题吗?


Tags: 函数文档目的服务器机器uilinuxwindows
3条回答

如果使用十进制模块,则无需使用“round”函数即可近似。以下是我在四舍五入时使用的方法,特别是在编写货币应用程序时:

Decimal(str(16.2)).quantize(Decimal('.01'), rounding=ROUND_UP)

这将返回一个16.20的十进制数。

即使不需要进行舍入,格式化也可以正常工作:

"%.1f" % n

我无法控制它的存储方式,但至少格式化工作正常:

'%.1f' % round(n, 1) # Gives you '5.6'

相关问题 更多 >