怎么会这样..

怎么会这样..

晕了,见图


这也晕!多数浮点数在计算机都是个近似值,用Python解释器看下面这个:
>>> 0.1
0.10000000000000001
那为什么print出来的是正常的呢
print会做必要转换。
print输出的时候会转换为字符串,比如
>>> str(0.1)
'0.1'
>>> print 0.1
0.1
但是一旦进行浮点运算一般都会丢失部分精度,换个例子:
>>> f = 0.1 + 0.2
>>> f
0.30000000000000004
>>> print f
0.3
可以看出转换过程中有舍入
小数.计算机里本来就不准的.
是啊,学C的时候,谭浩强还特意强调了呢……呵呵~
因为计算机内部用二进制表示浮点数,很多十进制数没有有限二进制表示。

QUOTE:
>>> 0.1
0.10000000000000001
>>> 0.2
0.20000000000000001
>>> 0.3
0.29999999999999999
>>>

上面这些是 0.1, 0.2, 0.3 的近似表示。

有些能有限表示出来,比如:

QUOTE:
>>> 0.5
0.5

至于 print 出的结果,打印的是 __str__ 的输出,

QUOTE:
>>> x=0.1
>>> x
0.10000000000000001
>>> print x.__str__()
0.1
>>> print x.__repr__()
0.10000000000000001



QUOTE:
原帖由 jjj137 于 2008-8-16 18:10 发表
是啊,学C的时候,谭浩强还特意强调了呢……呵呵~

看来我有必要回去看书了...
计算机表示数的时候就这样