Flevtek Asked:2024-12-02 03:45:45 +0000 UTC2024-12-02 03:45:45 +0000 UTC 2024-12-02 03:45:45 +0000 UTC 期间内小数和分数运算时不准确 772 我正在尝试添加 0.7 和 1/3 等数字: print(Decimal(0.7)+Decimal(1/3)) 但是当添加这些数字时,它输出 1.033333333333333288924412348。如果因为我正在计划一个类似计算器的项目而无法使用舍入,我该如何解决这个问题? python 1 个回答 Voted Best Answer CrazyElf 2024-12-02T15:26:57Z2024-12-02T15:26:57Z 这不是不准确Decimal,而是Python本身内置的浮点数不准确,你传递给构造函数Decimal的这些数字是0.7和1/3,它们已经不准确地传递给了Decimal。 顺便说一句,有一个有用的技巧可以防止您将来犯此类错误(将防止您混合类型float和Decimal): from decimal import getcontext, FloatOperation, Decimal c = getcontext() c.traps[FloatOperation] = True print(Decimal(0.7)+Decimal(1/3)) 我们得到一个例外FloatOperation: --------------------------------------------------------------------------- FloatOperation Traceback (most recent call last) 3 c = getcontext() 4 c.traps[FloatOperation] = True ----> 5 print(Decimal(0.7)+Decimal(1/3)) FloatOperation: [<class 'decimal.FloatOperation'>] 我们将其更改为注释中建议的内容,以便排除任何Python本身内置浮点数的操作(只有字符串和整数,我们直接传递给构造函数Decimal,这样他们就没有时间“变质”): print(Decimal('0.7')+Decimal(1)/Decimal(3)) 我们得到(prec默认为 28): 1.033333333333333333333333333
这不是不准确
Decimal,而是Python本身内置的浮点数不准确,你传递给构造函数Decimal的这些数字是0.7和1/3,它们已经不准确地传递给了Decimal。顺便说一句,有一个有用的技巧可以防止您将来犯此类错误(将防止您混合类型
float和Decimal):我们得到一个例外
FloatOperation:我们将其更改为注释中建议的内容,以便排除任何Python本身内置浮点数的操作(只有字符串和整数,我们直接传递给构造函数
Decimal,这样他们就没有时间“变质”):我们得到(
prec默认为 28):