如果我这样做:12.45-12
在Python中我得到的答案是:0.44999999999999929
我是这么做的:0.45?
顺便说一下,我确实记得这样做:12.45-12.0 但没有结果。答案 0 :(得分:5)
这是因为许多小数不能用二进制精确表示。
例如,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模块。
答案 1 :(得分:2)
完全没问题,但你需要谷歌(并在StackOverflow上搜索)“IEEE 754”。
编辑:看看,例如在这里:Inaccurate Logarithm in Python或此处:Another floating point question
答案 2 :(得分:2)
同样在Python 2.4中,如果您需要更高的准确度,请查看decimal模块。