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

问题描述 投票:1回答:3

如何使用浮动正确添加或减去?例如,如何执行:

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之外的任何值都会导致查找错误。

python python-3.x floating-point precision floating-accuracy
3个回答
1
投票

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

decimal

1
投票

它实际上只是绕过浮点运算问题的一种方式,但我建议使用标准库中的>>> 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不同,但它们大多可以互换。


0
投票

我不知道你是否正在寻找它,但你可以尝试这样的事情:

float

我希望它会对你有所帮助!

阿德里安

© www.soinside.com 2019 - 2024. All rights reserved.