鱼C论坛

 找回密码
 立即注册
查看: 1548|回复: 9

整数和小数相乘

[复制链接]
发表于 2018-10-11 16:32:43 | 显示全部楼层 |阅读模式

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

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

x
>>> 70*0.01
0.7000000000000001
这是什么鬼?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-10-11 16:33:27 | 显示全部楼层
小数转换有精度的,计算机二进制存储,因为十进制小数转换二进制不能除的尽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-11 16:40:26 | 显示全部楼层
塔利班 发表于 2018-10-11 16:33
小数转换有精度的,计算机二进制存储,因为十进制小数转换二进制不能除的尽

我依次检查了一遍,情况如下:
a=1
while a<100:
    print(a*0.01)
    a+=1

0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.1
0.11
0.12
0.13
0.14
0.15
0.16
0.17
0.18
0.19
0.2
0.21
0.22
0.23
0.24
0.25
0.26
0.27
0.28
0.29
0.3
0.31
0.32
0.33
0.34
0.35000000000000003
0.36
0.37
0.38
0.39
0.4
0.41000000000000003
0.42
0.43
0.44
0.45
0.46
0.47000000000000003
0.48
0.49
0.5
0.51
0.52
0.53
0.54
0.55
0.56
0.5700000000000001
0.58
0.59
0.6
0.61
0.62
0.63
0.64
0.65
0.66
0.67
0.68
0.6900000000000001
0.7000000000000001
0.71
0.72
0.73
0.74
0.75
0.76
0.77
0.78
0.79
0.8
0.81
0.8200000000000001
0.8300000000000001
0.84
0.85
0.86
0.87
0.88
0.89
0.9
0.91
0.92
0.93
0.9400000000000001
0.9500000000000001
0.96
0.97
0.98
0.99
有没有办法解决,是我哪里没设置对吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-11 16:46:13 | 显示全部楼层
round了解一下
a=0.70001
b=0.69999
c=round(a,2)
d=round(b,2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-11 19:42:13 | 显示全部楼层
本帖最后由 风扫地 于 2018-10-11 19:46 编辑

小数的存储精度造成的。
举个栗子:有的数用十进制表示出来是有限位数的数,但用二进制去表示的时候就是无限循环的数,计算机当然无法放下无限位数的数,存储的时候一截断肯定就出现误差。
具体到你的例子,误差是怎么造成的了?涉及到的知识就是浮点型数据在计算机内是如何存储的,水平有限就不展开了。一般的场合,这个误差不会影响到最终的结果。
但需要注意的一点是,由于存储精度的关系,在很多语言中(例如C或C++中),小数之间比较大小、比较等于都不能用< > == != 这些符号直接比较,需要做减法或者使用特殊的库函数做逻辑运算;
在python中是不是也不能直接比较小数大小,我就不太清楚了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-10-11 21:42:53 | 显示全部楼层
风扫地 发表于 2018-10-11 19:42
小数的存储精度造成的。
举个栗子:有的数用十进制表示出来是有限位数的数,但用二进制去表示的时候就是无 ...

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

使用道具 举报

 楼主| 发表于 2018-10-11 21:45:58 | 显示全部楼层
塔利班 发表于 2018-10-11 16:46
round了解一下
a=0.70001
b=0.69999

阔以的,有没有方法根治?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-11 21:46:18 | 显示全部楼层
yzb 发表于 2018-10-11 21:45
阔以的,有没有方法根治?

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

使用道具 举报

 楼主| 发表于 2018-10-11 22:00:38 | 显示全部楼层

你的python也是这样的么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-11 22:06:44 | 显示全部楼层
yzb 发表于 2018-10-11 22:00
你的python也是这样的么

不是说过了了么,计算机除不尽的问题,你有没有试过把0.7用2进制表示过,看看有多少位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 07:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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