python3之数字(在实际应用中的数字--数字显式的格式)
----------
注意:尽管这样,并不是所有的值都有这么多的数字需要显示,如例:
----------
如例:
>>>a = 3
>>>b = 4
>>>b/(2.0+a)
0.8000000000000000004
>>>print(b/(2.0+a))
0.8
在这个奇怪的结果背后的真正原因是浮点数的硬件限制,以及它无法精确地表现一些值。因为这是计算机的架构原因,那么我们的解释是用第一个输出的所有数字都在计算要的浮点数硬件中,仅仅是你不习惯看它们而已。
实际上,这真的只是一个显示问题---
交互提示模式下结果的自动回显会比打印语句显示更多的数字位数。如果你不想看到所有的位数,使用
print;或者后面要讲到的"
str和repr显示格式",那么你将会得到一个用户友好的显示。(
在python3.2.1中,测试这个例子,好像不存在这个问题,改进了??)
注意:尽管这样,并不是所有的值都有这么多的数字需要显示,如例:
>>>1/2.0
0.5
并且除了打印和自动回显之外,还有很多种方法显示计算机中的数字的位数:
>>>num = 1/3.0
>>>num
0.33333333333333331
>>>print(num)
0.333333333333
>>>'%e' % num
'3.333333e-001'
>>>'%4.2f' % num
'0.33'
>>>'{0:4.2f}'.forat(num)
'0.33'
这些方法中的
最后三个使用了字符串格式化,这是灵活地进行格式化的一种工具。
关于str和repr显示格式
从技术上来说,默认的交互模式回显和打印的区别就相当于内置repr和str函数的区别(当然,我在python3.2.1版中测试,没有差异):
>>>num=1/3
>>>repr(num)
'0.33333333333333331'
>>>str(num)
'0.3333333333333'
这两个函数都会把任意对象变换成它们的字符串表示,repr(也就是默认的交互模式回显)产生的结果看起来就好像它们是代码。str(也就是打印语句)转变为一种通常对用户更加友好的格式。一些对象两种方式都有:str用于一般用途,repr用于额外细节。