我有一个程序,可以生成我需要的表格。 当数字之间的差异足够大(大约5分)时,一切都正常。 所以我决定使用十进制库。但是当我把这个模块添加到程序中时,一切都被破坏了(数字是一样的)。 这是我的输出(很少有起始行)和小数
0.00402787895809813677877597726251 0.00402787895809813677877597726251
0.00402787895809813677877597726251 0.00402787895809813677877597726251
0.00402787895809813677877597726251 0.00402787895809813677877597726251
正如您所看到的,它们是相同的,但是基数是不同的。 如何修复这个bug
from decimal import *
getcontext().prec = 30
ls = [1,4,2,1,1,1,2,1,1,1,1,1,1,1,1,2]
#N = Decimal(22)
l = Decimal(0.0040278789580981364238)
r = Decimal(0.0040278789580981370940)
one = Decimal(r-l)/Decimal(22)
print(len(ls))
for elem in ls:
print(Decimal(l),'\t',Decimal(l)+Decimal(one)*Decimal(elem))
l+=Decimal(one)*Decimal(elem)
您需要从字符串而不是浮点数构造小数:
浮点的精度有限,这意味着
0.0040278789580981370940
和0.0040278789580981364238
在内部被“四舍五入”为相同的数字(有关为什么不可避免的原因的更多详细信息,请参见Floating Point Arithmetic: Issues and Limitations)如果使用字符串作为构造函数,则可以以任意精度生成十进制数
相关问题 更多 >
编程相关推荐