嗨,我需要比较我正在使用以下代码的项目中的浮点值
if style_score.style_quiz_score ==float(17.40):
但它不适用于此但是当我将值从 17.40 更改为 17 时它工作正常,请告诉我如何比较浮点值
嗨,我需要比较我正在使用以下代码的项目中的浮点值
if style_score.style_quiz_score ==float(17.40):
但它不适用于此但是当我将值从 17.40 更改为 17 时它工作正常,请告诉我如何比较浮点值
那是因为舍入错误。永远不要将浮点数与 比较==
,始终使用此模板:
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(或任何依赖于浮点的底层硬件表示的语言)中比较浮点数总是一件棘手的事情。最好的方法是定义一个容差,在这个容差内你会认为两个数字相等(比如,10^-6
),然后检查数字之间的绝对差是否小于你的容差。
代码:
TOLERANCE=10**-6
def are_floats_equal(a,b):
return abs(a-b) <= TOLERANCE
PS:如果你真的很想用浮点数进行精确的、任意精度的计算,请使用十进制模块。顺便说一句,该页面有一些关于常规浮动失败点的好例子。但是,请注意,这比使用常规浮点数要慢得多,所以除非你真的需要它,否则不要这样做。