在Python中使用"Decimal"

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以上的区别
  • 鉴于两者都没有,为什么2会产生3的差异答案" "

NPE*_*NPE 6

简而言之,既不能0.10.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.10.3初始化时Decimal(),结果值大约为 0.10.3.

使用字符串("0.1""0.3")没有这个问题.

最后,您的第二个示例会为您的第三个示例生成不同的结果,因为尽管两者都涉及隐式舍入,但它们涉及舍入到不同的小数位数.