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



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

2.4e-07 - 1e-8

以便它返回2.3e-7而不是2.2999999999999997e-07

首先转换为 int 会产生意外的结果,下面返回2.2e-07

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

同样地

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

返回2.2999999999999997e-07

如何以小数点后 8 位精度执行数字的减法和加法?

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

我建议使用 decimal 数据类型(它存在于 Python 的 stardard 安装中(,因为它使用固定精度来避免您正在谈论的差异。

>>> 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')

这实际上只是绕过浮点运算问题的一种方式,但我建议使用标准库中的decimal包。它允许您执行精确的浮点数学运算。

以你为例,

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

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

我不知道

这是否是你要找的,但你可以尝试那种东西:

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

希望对您有所帮助!

阿德里安

相关内容

  • 没有找到相关文章

最新更新