0

嗨,我需要比较我正在使用以下代码的项目中的浮点值

 if style_score.style_quiz_score ==float(17.40):

但它不适用于此但是当我将值从 17.40 更改为 17 时它工作正常,请告诉我如何比较浮点值

4

2 回答 2

2

那是因为舍入错误。永远不要将浮点数与 比较==,始终使用此模板:

def floats_are_the_same(a,b): return abs(a-b) < 1e-6

if floats_are_the_same(value, 17.4):
    ....

即检查该值是否接近某个期望值。这是因为浮点算术几乎总是有舍入误差:

>>> 17.1 + 0.3
17.400000000000002

另请参阅:在 Python 中比较浮点数是否相等的最佳方法是什么?

于 2013-02-21T10:40:58.110 回答
2

在 python(或任何依赖于浮点的底层硬件表示的语言)中比较浮点数总是一件棘手的事情。最好的方法是定义一个容差,在这个容差内你会认为两个数字相等(比如,10^-6),然后检查数字之间的绝对差是否小于你的容差。

代码:

TOLERANCE=10**-6

def are_floats_equal(a,b):
  return abs(a-b) <= TOLERANCE

PS:如果你真的很想用浮点数进行精确的、任意精度的计算,请使用十进制模块。顺便说一句,该页面有一些关于常规浮动失败点的好例子。但是,请注意,这比使用常规浮点数要慢得多,所以除非你真的需要它,否则不要这样做。

于 2013-02-21T10:41:37.843 回答