如何正确处理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
希望对您有所帮助!
阿德里安
如何正确使用浮点数进行加减运算? 例如如何执行:
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
希望对您有所帮助!
阿德里安