Python2.7IF语句为0.05==0.05提供假输出

2024-09-26 22:54:52 发布

您现在位置:Python中文网/ 问答频道 /正文

对于我的作业,我必须检查计算值是否在0.05到0.5之间。要做到这一点,我认为从一个减去另一个,采取绝对值,并检查是否小于或等于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。 我做错什么了吗?你知道吗


Tags: no代码ifis作业abselseyes
3条回答

我会这样使用十进制:

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')

那你的测试就可以了。你知道吗

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

试试这是:-

x = round(abs(0.5 - 0.55),2)
y = round(abs(0.4 - 0.45),2)
>>> 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添加了相关的^{}。你知道吗

相关问题 更多 >

    热门问题