首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >round()似乎不能正确舍入

round()似乎不能正确舍入
EN

Stack Overflow用户
提问于 2008-09-11 23:08:09
回答 18查看 243.5K关注 0票数 134

round()函数的文档指出,向它传递一个数字,小数点后的位置进行四舍五入。因此,它应该这样做:

代码语言:javascript
复制
n = 5.59
round(n, 1) # 5.6

但是,在现实中,古老的浮点怪癖悄然而至,你会得到:

代码语言:javascript
复制
5.5999999999999996

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

除了创建我自己的圆形库之外,还有什么方法可以解决这个问题吗?

EN

回答 18

Stack Overflow用户

回答已采纳

发布于 2008-09-11 15:11:41

我无法控制它的存储方式,但至少格式化是正确的:

代码语言:javascript
复制
'%.1f' % round(n, 1) # Gives you '5.6'
票数 107
EN

Stack Overflow用户

发布于 2008-09-11 15:14:22

即使不需要舍入,格式化也能正常工作:

代码语言:javascript
复制
"%.1f" % n
票数 103
EN

Stack Overflow用户

发布于 2013-03-14 07:48:34

如果你使用Decimal模块,你可以在不使用'round‘函数的情况下进行近似。下面是我用来进行舍入的代码,尤其是在编写货币应用程序时:

代码语言:javascript
复制
from decimal import Decimal, ROUND_UP

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

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

票数 36
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档