如何解决 Python 中浮点数的表示错误?
How to solve representation errors with floating-point numbers in Python?
我需要在百位截去小数而不四舍五入。
我正在使用方法:
y = 78.459
x = int(y * 100) / 100
返回为 78.45
。应该的。
但是,如果我这样做
y = 5.10
x = int(y * 100) / 100
当它应该是 5.10
时,它会返回 5.09
我知道这是一个表示错误,因为 Python 中的浮点数不准确,但我不知道如何修复它。
如果有人可以帮助我弄清楚如何修复表示错误或者找到一种更好的方法来截断百分之一的位置,我将非常感激。
谢谢
为此使用 decimal
模块:
>>> from decimal import Decimal as d
>>> y = d('5.10')
>>> x = int(y * 100) / 100
>>> x
5.1
>>>
您可以在decimal
模块中使用quantize
function:
>>> import decimal
>>> y = decimal.Decimal('78.459')
>>> z = decimal.Decimal('.01')
>>> y.quantize(z, rounding=decimal.ROUND_DOWN)
Decimal('78.45')
我需要在百位截去小数而不四舍五入。 我正在使用方法:
y = 78.459
x = int(y * 100) / 100
返回为 78.45
。应该的。
但是,如果我这样做
y = 5.10
x = int(y * 100) / 100
当它应该是 5.10
5.09
我知道这是一个表示错误,因为 Python 中的浮点数不准确,但我不知道如何修复它。 如果有人可以帮助我弄清楚如何修复表示错误或者找到一种更好的方法来截断百分之一的位置,我将非常感激。 谢谢
为此使用 decimal
模块:
>>> from decimal import Decimal as d
>>> y = d('5.10')
>>> x = int(y * 100) / 100
>>> x
5.1
>>>
您可以在decimal
模块中使用quantize
function:
>>> import decimal
>>> y = decimal.Decimal('78.459')
>>> z = decimal.Decimal('.01')
>>> y.quantize(z, rounding=decimal.ROUND_DOWN)
Decimal('78.45')