如何正确处理Python中的浮点运算?

How to correctly deal with floating point arithmetic in Python?

如何正确使用浮点数进行加减运算? 例如如何执行:

2.4e-07 - 1e-8

所以它 returns 2.3e-7 而不是 2.2999999999999997e-07.

首先转换为 int 会产生意想不到的结果,如下 returns 2.2e-07:

int(2.4e-07 * 1e8 - 1) * 1e-8

同样,

(2.4e-07 * 1e8 - 1) * 1e-8

returns 2.2999999999999997e-07.

如何对小数点后8位的数字进行减法和加法运算?

2.2999999999999997e-07 是不够的,因为该数字用作字典中的查找,并且键是 2.3e-7。这意味着 2.3e-7 以外的任何值都会导致查找不正确。

这实际上只是一种绕过浮点运算问题的方法,但我建议使用标准库中的 decimal 包。它可以让您进行精确的浮点运算。

使用你的例子,

$ from decimal import Decimal
$ x = Decimal('2.4e-7')
$ y = Decimal('1e-8')
$ x-y
Decimal('2.3E-7')

值得注意的是,Decimal 对象不同于 float 内置对象,但它们大多可以互换。

我建议使用 decimal 数据类型(它存在于 Python 的标准安装中),因为它使用固定精度来避免您所说的差异。

>>> from decimal import Decimal
>>> x = Decimal('2.4e-7')
>>> x
Decimal('2.4E-7')
>>> y = Decimal('1e-8')
>>> y
Decimal('1E-8')
>>> x - y
Decimal('2.3E-7')

不知道是不是你要找的,你可以试一下:

a = 0.555555555
a = float("{0:.2f}".format(a))
>>> 0.56

希望对您有所帮助!

阿德里安