我一直在测试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也提供相同的输出
所以我不理解这两件事
0.6666666666666666
之后的随机和错误数字?我希望它与0.6
6's
getcontext().prec
getcontext().prec = 3
应该让它长3位数?因为它仍然比这更多,getcontext().prec = 500
也不能使它接近500位数修改
我在Windows上使用Python3
答案 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