python 2.7如果语句给出错误输出0.05 == 0.05 [重复]

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

这个问题在这里已有答案:

对于我的任务,我必须检查计算值是否在0.5的0.05之内。要做到这一点,我想从另一个中减去一个,取绝对值并检查是否小于或等于0.05应该做的伎俩。但是当我尝试这段代码时。

x = abs(0.5 - 0.55)

if x <= 0.05:
    print 'x is', x, 'x = yes'
else:
    print 'x is', x, 'x = no'

y = abs(0.4 - 0.45)

if y <= 0.05:
    print 'y is', y, 'y = yes'
else:
    print 'y is', y, 'y = no'

返回一个非常奇怪的输出。

x is 0.05 x = no
y is 0.05 y = yes

其中y被视为0.05但x未被视为0.05,但根据python,两个值均等于0.05。难道我做错了什么?

python python-2.7
3个回答
1
投票
>>> x = abs(0.5 - 0.55)
>>> x
0.050000000000000044
>>> y = abs(0.4 - 0.45)
>>> y
0.04999999999999999

这就是浮动的行为方式。 Most programming languages are like this.通常在比较浮点数时,检查是否在允许的值误差内更安全,而不是检查相等性:

>>> x = abs(0.5 - 0.55)
>>> allowed_error = 0.000001
>>> abs(x - 0.05) <= allowed_error
True

Python3.5添加了相关的math.isclose


1
投票

默认情况下,它会生成长浮动值

试试这个:-

x = round(abs(0.5 - 0.55),2)
y = round(abs(0.4 - 0.45),2)

0
投票

我会以这种方式使用Decimal:

from decimal import Decimal
x1 = abs(0.5 - 0.55)
x2 = Decimal(abs(0.5 - 0.55)).quantize(Decimal(10) ** -2)

print (x1)
print (x2)

输出:

0.050000000000000044
Decimal('0.05')

然后你的测试将正常工作。

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