大数跨境
0
0

计算机魔术?为何Python中0.1 + 0.2 ≠ 0.3

计算机魔术?为何Python中0.1 + 0.2 ≠ 0.3 数据分析与统计学之美
2023-12-12
2

大家好,我是黄伟🤭

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

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

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

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

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

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

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

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

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

经典书籍介绍
清华大学出版社新书《案例学Python,刚刚上架感兴趣的朋友推荐入手一本

《案例学Python(基础篇)》循序渐进地讲解Python语言的基本语法知识,并通过大量的实例讲解各个知识点的具体用法。本书分为4篇,共计14章。其中第1篇是准备开始篇,包括Python简要介绍;第2篇是基础语法篇,包括基本语法,Python的面向对象,文件操作,标准库函数,异常处理,多线程开发;第3篇是典型应用篇,包括网络开发,Tkinter图形化界面开发,数据库开发,Django Web开发,数据可视化;第4篇是项目实战篇,通过两个大型实例的实现过程,详细讲解使用Python语言开发大型商业项目的过程,这两个项目是水果连连看游戏和人工智能版NBA季后赛预测分析系统。

《案例学Python(基础篇)》适合初学Python的人员阅读,也适合计算机相关专业的师生阅读,还可供开发人员参考使用。

万水千山总是情,点个 👍 行不行

感谢各位转发点赞

【声明】内容源于网络
0
0
数据分析与统计学之美
免费领10w字"Python知识手册",共400页,后台回复“十万”领取!
内容 1080
粉丝 0
数据分析与统计学之美 免费领10w字"Python知识手册",共400页,后台回复“十万”领取!
总阅读76
粉丝0
内容1.1k