有人可以解释一下下面发生了什么吗:(我使用Python 3.3)
1. >>> Decimal("0.1") + Decimal("0.1") + Decimal("0.1") - Decimal("0.3")
Decimal('0.0')
2. >>> Decimal(0.1) + Decimal(0.1) + Decimal(0.1) - Decimal(0.3)
Decimal('2.775557561565156540423631668E-17')
3. >>> Decimal(0.1 + 0.1 + 0.1 - 0.3)
Decimal('5.5511151231257827021181583404541015625E-17')
我知道这与浮点限制有关,如果有人能解释原因,我会很高兴
- 有什么
" "
与上面示例 1 和 2 之间的区别有关
- 既然两者都没有,为什么 2 会产生与 3 不同的答案
" "
?
简而言之,两者都不是0.1
nor 0.3
可以精确地表示为float
:
In [3]: '%.20f' % 0.1
Out[3]: '0.10000000000000000555'
In [4]: '%.20f' % 0.3
Out[4]: '0.29999999999999998890'
因此,当您使用0.1
or 0.3
初始化Decimal()
,结果值为大约 0.1
or 0.3
.
使用字符串 ("0.1"
or "0.3"
)不存在这个问题。
最后,您的第二个示例产生与第三个示例不同的结果,因为即使两者都涉及隐式舍入,但它们都涉及舍入到不同的小数位数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)