yin*_*nka 2 python decimal-point python-3.x
有人可以解释下面发生的事情:(我使用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')
Run Code Online (Sandbox Code Playgroud)
我知道它与浮点限制有关,如果有人可以解释原因,我会很高兴
" "要做的实例1和2以上的区别" "?简而言之,既不能0.1也0.3不能完全表示为float:
In [3]: '%.20f' % 0.1
Out[3]: '0.10000000000000000555'
In [4]: '%.20f' % 0.3
Out[4]: '0.29999999999999998890'
Run Code Online (Sandbox Code Playgroud)
因此,当您使用0.1或0.3初始化时Decimal(),结果值大约为 0.1或0.3.
使用字符串("0.1"或"0.3")没有这个问题.
最后,您的第二个示例会为您的第三个示例生成不同的结果,因为尽管两者都涉及隐式舍入,但它们涉及舍入到不同的小数位数.