Antion 发表于 2019-10-17 10:20

python知识点求补充

num1 = 0.1
num2 = 0.2
num3 = 0.3
num4 = num1 + num2
if num3 == num4:
    print("y")
else:
    print("n")
结果是n
0.1和0.2 相加不等于    0.3
0.1+0.2=0.30000000000004

python 的加法算法的差误是怎么回事
这个知识点不太清楚 求大神解答
看视频只知道算数有误差 但是不知道原因 和应对方法 取整和取小数点位数知道但是想闹明白为什么有误差

15774211127 发表于 2019-10-17 10:22

本帖最后由 15774211127 于 2019-10-17 10:23 编辑

数据精度、存储标准、等一系列问题产生等原因
建议看下这篇文章 Float类型出现舍入误差的原因 https://blog.csdn.net/yingmuliuchuan/article/details/81043549 或者 浮点数float累加误差分析与解决 https://blog.csdn.net/zhrh0096/article/details/38589067

dazhuangzhuang 发表于 2019-10-17 10:39

本帖最后由 dazhuangzhuang 于 2019-10-17 10:40 编辑

用decimal
可以控制精度
或者 用 a+b-c <= 0.001 也能实现正确判断,看你实际需求吧!

Rzzsss 发表于 2019-10-17 10:43

不止是Python,所有高级语言都会存在。

Antion 发表于 2019-10-17 10:53

15774211127 发表于 2019-10-17 10:22
数据精度、存储标准、等一系列问题产生等原因
建议看下这篇文章 Float类型出现舍入误差的原因 https://blo ...

是不是输出结果前 都需要加上取整的函数文章太长 看不进去 ····

Antion 发表于 2019-10-17 10:54

dazhuangzhuang 发表于 2019-10-17 10:39
用decimal
可以控制精度
或者 用 a+b-c

python语言有这个 函数吗

825578598 发表于 2019-10-17 10:54

1+1都不等于2呀,为什么数学上是等于2?是为了更好的计算,但是编程语言需要精确,比如金融行业的,你必须非常精确,不然钱算起来就比对了,另外有个大部分写编程的人都会犯的一个错,就是金额保留两位小数的时候,直接用四舍五入的函数,那就麻烦了,钱就会变多,钱是不能四舍五入的

Antion 发表于 2019-10-17 10:59

825578598 发表于 2019-10-17 10:54
1+1都不等于2呀,为什么数学上是等于2?是为了更好的计算,但是编程语言需要精确,比如金融行业的,你必须 ...

好颠覆认知啊,1+1 不等于二·········   我的认知里面就是一个苹果加一个苹果 等于俩苹果,为什么1+1不等于2啊

meforeg 发表于 2019-10-17 11:02

825578598 发表于 2019-10-17 10:54
1+1都不等于2呀,为什么数学上是等于2?是为了更好的计算,但是编程语言需要精确,比如金融行业的,你必须 ...

是二进制的问题

pj-Yang 发表于 2019-10-17 11:02

1+1是等于2,浮点数0.1+0.1不等于0.2是因为0.1无法用二进制来精确表达,以下是百度搜索的结果:
2进制表示小数的时候只能够表示能够用1/(2^n)的和的任意组合
例如:
0.5能够表示,因为它可以表示成为1/2
0.75也能够表示,因为它可以表示成为1/2+1/(2^2)
0.875也能够表示,因为它可以表示成为1/2+1/(2^2)+1/(2^3)
但是0.1不能够精确表示,因为它补能够表示成为1/(2^n)的和的形式
页: [1] 2
查看完整版本: python知识点求补充