55问答网
所有问题
Python3.3版本中1.2*2=2.4,而1.2*3的结果为什么是3.5999999999999996
如题所述
举报该问题
推荐答案 2013-08-07
根本原因是因为计算机内部处理数据的形式是二进制的。
举个例子
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集讲到!
温馨提示:答案为网友推荐,仅供参考
当前网址:
http://55.wendadaohang.com/zd/QL8Q4FIQ8.html
其他回答
第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
>>>
相似回答
大家正在搜
相关问题
两个python版本,怎么确定哪个是在用的
老师要求写一份C语言课程设计报告,有一个问题是系统运行环境与...
如何在一台电脑上同时使用 Python 2 和 Python...
python matplotlib怎么用
python2和python3可以同时安装吗
pycharm,Python版本3.5中,输入range(5...
python3.5中的地板除问题
装的python3 为什么版本是2.7