如何解决浮点错误?

时间:2017-11-05 03:47:25

标签: python python-3.x

我已经在线查看了python的浮点算术限制,似乎解决问题的最简单方法是使用十进制模块。例如,我尝试了以下代码,它给了我完美的0.8答案。

heroku

但是,当我尝试将此方法合并到涉及列表的算法时,该方法失败。

from decimal import Decimal
Decimal('4') - Decimal('3.2')

这给了我一个“InvalidOperation”错误。然后我试了

from decimal import Decimal
number = [3.2, 1.1]
Decimal('4') - Decimal('number[0]')

这个编译但给了我十进制('0.7999999999999998223643160600'而不是0.8

那么有人可以告诉我如何解决这样的问题吗? (使用十进制或任何其他方法)。

提前致谢!

2 个答案:

答案 0 :(得分:3)

将字符串参数传递给Decimal以获得预期的行为。在您的示例中,您传递的是浮点数3.2而不是字符串'3.2'

number = [ '3.2', '1.1' ]
Decimal('4') - Decimal(number[0])

返回:

Decimal('0.8')

答案 1 :(得分:1)

以字符串形式用'4'指定Decimal('4')的原因是因为当Python中的Decimal类的实例用字符串实例化时,需要“符合十进制数字字符串句法。”像'number[0]'这样的字符串不代表数字,预计格式错误的字符串会引发InvalidOperation例外。

Decimal('4') - Decimal('3.8')之类的东西不是技术浮点数,但会得到一个确切的答案。浮点比算术更复杂,通常用小数点来理解,并且不会非常精确。

在这里查看Decimal类的文档(https://docs.python.org/3.6/library/decimal.html)以及此处有关浮点运算的文章(https://docs.python.org/3/tutorial/floatingpoint.html)可能会有所帮助。