鱼C论坛

 找回密码
 立即注册
查看: 1935|回复: 3

[已解决]刚学两天,纯小白求助!

[复制链接]
发表于 2020-8-22 16:29:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
下面这个我输入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')
最佳答案
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')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 1

使用道具 举报

发表于 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')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 06:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表