为什么`getcontext()。prec = 50`在Python中使用Decimal不改变变量`a`的长度

时间:2017-08-31 06:12:55

标签: python python-3.x decimal

代码

我一直在测试Python3中的Decimal,我遇到了一些对我没有任何意义的奇怪事情。

首先,我导入了Decimal

from decimal import *

接下来,我设置了我想要任何计算的准确度(以数字为单位)

getcontext().prec = 50

然后,我定义并打印了一个名为num的变量,该变量等于0.6重复出现

num = Decimal(2/3)

然而,当我尝试打印num时,我得到了这个

print(num)
0.66666666666666662965923251249478198587894439697265625

另外,改为以下任何一种:

getcontext().prec = 500
getcontext().prec = 3

什么都不改变,即使3也提供相同的输出

我的主要两个问题

所以我不理解这两件事

  1. 为什么第一个0.6666666666666666之后的随机和错误数字?我希望它与0.6
  2. 中定义的数字一样6's getcontext().prec
  3. Isn&#t; t getcontext().prec = 3应该让它长3位数?因为它仍然比这更多,getcontext().prec = 500也不能使它接近500位数
  4. 修改

    我在Windows上使用Python3

1 个答案:

答案 0 :(得分:3)

您正在将2/3分区的结果转换为{{1,这是 IEEE 754双精度浮点近似值的结果为2/3,即0.6666 ... }}。将 Decimal 除以另一个,比如说,你得到了

Decimal

然而,这些仍然是近似值。如果您只处理分数(只是做算术),请使用>>> from decimal import * >>> getcontext().prec = 50 >>> Decimal(2) / Decimal(3) Decimal('0.66666666666666666666666666666666666666666666666667')

fractions.Fraction