为什么在Python3.7.4里,0.3+0.6的显示结果是0.8999999999而不是0.9

嗑嗨伦纳德
楼主 (虎扑)


嗑嗨伦纳德
顶顶

4
4lastdance
同问

小伙子要尊重老大爷
好像加个round就是0.9了

带篮孑
浮点数的工作原理
建议搜一下
还有0.1+0.2=0.300000...004都是类似的原理

j
joexi
浮点数精度问题 decimal可解决

虎扑用户144847
引用 @嗑嗨伦纳德 发表的:
顶顶

你把它format成两位小数就行了

o
oyxh
浮点数的精度
断剑
跟浮点数的存储有关。所以对比度点数的时候,一般要加个极小的差值范围

虎扑用户075744
好像是因为二进制里面有一些数是无限小数,所有编程语言计算0.1+0.2都不等于0.3,因为无限小数只能取有限位所以有误差,具体我也不懂

祥林豹
format搞一下

没有昵啊啊啊啊
浮点计算 [ 此帖被没有昵啊啊啊啊在2020-04-10 17:28修改 ]
佛系观赛
部分浮点数只能近似表达,再想了解的细一点你不如百度去了
篮球诗人库兹马
因为计算机不精确。。。

3
30k_10k10k
合理

可我只想好好学习
因为计算机计算浮点数会损失精度只能精确计算2的多少多少次方这样的数0.3 0.6都不能用2的多少次方来精确表示,可以了解一点计算机组成原理的知识。

虎扑用户486841
有的些数字计算机的浮点数是表示不出来的,只能近似表达。计算机里浮点数表示方法就是从下面这个数列中选取一部分加起来近似表示:1/2 1/4 1/8 1/16……  0.1 + 0.2 != 0.3 但是 0.5 + 0.25 == 0.75 你学过编码就知道了 [ 此帖被山东号航母编队在2020-04-10 17:34修改 ]

嗑嗨伦纳德
学到了,感谢楼上老铁们

虎扑用户472365
计算机是2进制,小数用2的负N次方表示,所以0.5, 0.25, 0.125,.... 在计算机才是精确的,其它的数是不能用2的负N次表示,也就无法精确表示(只能无限接近)。

搜一下二进制小数表示法。
鸿
鸿蒙即天
建议以后遇到这种问题直接百度即可,基本你遇到的99.9%的问题都有人遇到并且解决过🐶

l
ldld9383
浮点数精度。。。。

p
phuinews
《深入理解计算机系统》讲浮点数讲得很好,看看就知道为什么了

w
wangjeffree
大一学C语言打基础很好,老师基本都会讲这个问题。
虎扑用户465560
在街上我甚至还能学编程
虎扑用户704518
round off error