Python3.3版本中1.2*2=2.4,而1.2*3的结果为什么是3.5999999999999996

如题所述

根本原因是因为计算机内部处理数据的形式是二进制的。

举个例子
1/10,以十为底:1*10^(-1);以二为底:0.00011001100...,形式上是一个无限循环小数!
然而计算机对浮点数的默认截止精度是17位,原本精确的十进制数将被保存为估计的二进制数,当显示给人看时,就被转化成估计的十进制数了。

值得注意的是,python在把数字显示给人看的时候,调用了repr(),这个函数的作用是把数字转化为string的形式,当然这个时候计算机已经对浮点数做了近似处理(你可以暂时理解成四舍五入)。

在更早的python版本中,你输入x=0.1,会返回x=1.00000000000000001,道理是一样的,而现在的版本会直接得到0.1,应该是python对显示做了优化处理。

以上如果你理解了,就知道1.2*3=3.5999999999999996的原因了

你可以参考麻省理工学院网易公开课视频---计算机科学及编程导论,这个在第5集讲到!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-03
计算机是这样的。因为计算机的内存的电容只有充电和放电两种状态,所以计算机在需要表示浮点数的时候,使用二进制的浮点数来近似的。比如用python执行1.2.hex()的话,会返回'0x1.3333333333333p+0',它的意思就是说python存储1.2的时候实际上是储存了1.1999999999999999555910790149937383830547332763671875
第2个回答  2013-08-03
or like this:

>>> import decimal
>>> a = 1.2

>>> da = decimal.Decimal("%.2f"%a)

>>> for x in xrange(10):

... print x * da
...
0.00
1.20
2.40
3.60
4.80
6.00
7.20
8.40
9.60
10.80
>>>
相似回答