python 四舍五入问题

2014-10-23 11:03:05 +08:00
 pc10201
from decimal import Decimal
a='238.345'

length=len(a[a.find('.'):])
if length>=3:
x='{:.2f}'.format(Decimal(a))
print x

结果是238.34
为什么不是238.35呢?
是最新的python 2.7 32位
7013 次点击
所在节点    Python
22 条回复
est
2014-10-23 14:11:56 +08:00
@davidli 准确的说不是python无法处理浮点,而是大多数程序的浮点计算,底层都是调用CPU芯片的IEEE 754指令。你要自己撸一个超高精度的软浮点库也行,用纯python的都可以,只是享受不到硬件加速了。
stillzhl
2014-10-24 11:14:14 +08:00
这篇论文应该解释了这个问题:
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/140941

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX