王源帮我带包烟 发表于 2020-8-22 16:29:33

刚学两天,纯小白求助!

下面这个我输入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:43:06

本帖最后由 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')

Twilight6 发表于 2020-8-22 16:47:20



你可以试着运行下面代码:
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:54:49

本帖最后由 聂嘉辉 于 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]
查看完整版本: 刚学两天,纯小白求助!