前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0.1+0.2竟然不等于0.3?!

0.1+0.2竟然不等于0.3?!

作者头像
Crossin先生
发布2023-12-14 09:44:32
1310
发布2023-12-14 09:44:32
举报

大家好,欢迎来到编程教室~

Python 里有一个大“bug”,0.1+0.2==0.3 的结果竟然是 False:

这个现象的原因在于:计算机底层是以二进制来存储数据,但像0.1、0.2、0.3这样的小数,转成二进制是无限循环的,在计算机里表示必须被截断成有限位数,无法精确表示。

所以这是计算机表示小数时的精度有限而造成的,几乎所有的小数都存在微小的误差。

这种误差非常小,在日常的使用中几乎没有影响,所以平常不会特别引入注意。但是如果要对小数进行数值相等「==」比较时,就会出现看似相等而实际不等的情况。

因此,在代码中比较小数时,通常会定义一个误差范围,比如10的负10次方。当两个数的差小于这个误差范围时,就近似地认为他们是相等的。

而对于金融、科研等精度要求比较高的领域,可以使用自带的decimal模块来准确控制精度。

不过这里额外提醒一下,在初始化Decimal类型对象时需要以字符串作为参数,不然用浮点数的话,得到的数值依然是带有误差的。

在日常中,还有一种简单的处理方法,就是类似涉及金钱数值时,直接以最小单位「分」作为计量单位而不用「元」,以此来避免进行小数的运算,这样就可以避开这个坑了。

关于计算机中的小数运算误差,你还遇过什么样的情况?欢迎在留言区讨论。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-12-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档