【发布时间】:2011-05-07 19:42:04
【问题描述】:
如果我这样做:12.45-12
在 Python 中,我得到的答案是:0.44999999999999929
我这样做是为了:0.45?
顺便说一句,我确实记得这样做:12.45-12.0 但没有结果。
【问题讨论】:
-
重复。请在 Python 中搜索浮点数。请。你说的是货币吗?钱?使用
decimal。
标签: python floating-point
如果我这样做:12.45-12
在 Python 中,我得到的答案是:0.44999999999999929
我这样做是为了:0.45?
顺便说一句,我确实记得这样做:12.45-12.0 但没有结果。
【问题讨论】:
decimal。
标签: python floating-point
这是因为许多小数不能用二进制精确表示。
例如 0.25 可以:它是0.01 (0*1, 0*1/2, 1*1/4)。 0.1 不能 (0.0001100110011...),就像你不能将 1/3 写成完整的小数 (0.3333333333...)。
如果你这样做
print(12.45-12)
你得到
0.45
因为print 只显示第一个有效数字。
请参阅Python docs 以获得出色的摘要。
如果您确实关心十进制值的准确性(例如为了避免金融机构中出现超人 III 场景),请查看 Decimal 模块。
【讨论】:
同样在 Python 2.4 中,如果您需要更高的准确性,请查看 decimal 模块。
【讨论】:
完全没问题,但您需要在 Google 上搜索(并在 StackOverflow 上搜索)“IEEE 754”。
编辑:看看例如这里:Inaccurate Logarithm in Python 或这里:Another floating point question
【讨论】: