刚学两天,纯小白求助!
下面这个我输入0.3怎么是no啊,哪里出了问题啊x=input('shuzi:')
y=float(x)
import decimal
a=decimal.Decimal('0.1')
b=decimal.Decimal('0.2')
if y >= (a+b):
print('yes')
else:
print('no')
本帖最后由 sunrise085 于 2020-8-22 16:59 编辑
这是存储精度问题,你可以试一下:0.1+0.2,得到的结果不是0.3,而是0.30000000000000004
0.3>=0.1+0.2
这个得到的是False
import decimal
x=input('shuzi:')
y=float(x)
a=decimal.Decimal('0.1')
b=decimal.Decimal('0.2')
if y >=float(a+b):#这样写,才是正确的
print('yes')
else:
print('no')
你可以试着运行下面代码:
x=input('shuzi:')
y=float(x)
import decimal
a=decimal.Decimal('0.1')
b=decimal.Decimal('0.2')
print(y,a+b)
print(type(y),type(a+b))
print(y == a+b)
if y >= (a+b):
print('yes')
else:
print('no')
输出结果:
shuzi:0.3
0.3 0.3
False
<class 'float'> <class 'decimal.Decimal'>
no
他们虽然都是 0.3 ,但是实际上是不同的类,一个是 float ,一个是 Decimal
两类的精确度不同,导致 float 的 0.3 不和 Decimal 的 0.3 的不相等的,也就是上面代码的 print(y == a+b) 打印结果是 False
本帖最后由 聂嘉辉 于 2020-8-22 16:58 编辑
import decimal
x = float(input('数字:'))
a = decimal.Decimal('0.1')
b = decimal.Decimal('0.2')
if x >= float(a+b):
print('yes')
else:
print('no')
页:
[1]