[python基础] 浮点数乘法的偏差问题

>>> 2.2*3
6.6000000000000005

详细的原理在IEEE 754浮点数标准python

 

小数以二进制形式表示时的有穷性致使的,spa

这不是Python的问题,而是实数的无限精度跟计算机的有限内存之间的矛盾code

计算机的内存、cpu寄存器等等这些硬件单元都是有限的只能表示有限位数的二进制位,所以存储的二进制小数就会和实际转换而成的二进制数有必定的偏差。(你能够试着将0.3转化为二进制表示,也将出现一个循环小数。)blog

实际上,大多数状况下,小数在计算机中是以一种相似科学计数法的形式表示的,具体的能够参考一下其余的资料。但即使如此,仍然存在偏差。内存

因此在python中不建议直接将两个浮点数进行大小比较,或者作精确的计算,每每会获得意想不到的结果。

 

关于控制精度的方法能够使用round和decimal模块ci

 

使用decimal模块计算时:io

>>> from decimal import *
>>> Decimal('2.2')*Decimal('3')
Decimal('6.6')

 

相关连接class

https://www.zhihu.com/question/25457573import

相关文章
相关标签/搜索