3.3 æ•°å—çš„æ ¼å¼�化输出¶
问题¶
ä½ éœ€è¦�å°†æ•°å—æ ¼å¼�化å�Žè¾“出,并控制数å—çš„ä½�æ•°ã€�对é½�ã€�å�ƒä½�分隔符和其他的细节。
解决方案¶
æ ¼å¼�化输出å�•个数å—的时候,å�¯ä»¥ä½¿ç”¨å†…置的 format() 函数,比如:
>>> x = 1234.56789
>>> # Two decimal places of accuracy
>>> format(x, '0.2f')
'1234.57'
>>> # Right justified in 10 chars, one-digit accuracy
>>> format(x, '>10.1f')
' 1234.6'
>>> # Left justified
>>> format(x, '<10.1f')
'1234.6 '
>>> # Centered
>>> format(x, '^10.1f')
' 1234.6 '
>>> # Inclusion of thousands separator
>>> format(x, ',')
'1,234.56789'
>>> format(x, '0,.1f')
'1,234.6'
>>>
å¦‚æžœä½ æƒ³ä½¿ç”¨æŒ‡æ•°è®°æ³•ï¼Œå°†f改æˆ�e或者E(å�–决于指数输出的大å°�写形å¼�)。比如:
>>> format(x, 'e')
'1.234568e+03'
>>> format(x, '0.2E')
'1.23E+03'
>>>
�时指定宽度和精度的一般形�是 '[<>^]?width[,]?(.digits)?' ,
å…¶ä¸ width å’Œ digits 为整数,?代表å�¯é€‰éƒ¨åˆ†ã€‚
å�Œæ ·çš„æ ¼å¼�也被用在å—符串的 format() 方法ä¸ã€‚比如:
>>> 'The value is {:0,.2f}'.format(x)
'The value is 1,234.57'
>>>
讨论¶
æ•°å—æ ¼å¼�化输出通常是比较简å�•的。上é�¢æ¼”示的技术å�Œæ—¶é€‚用于浮点数和 decimal 模å�—ä¸çš„ Decimal æ•°å—对象。
当指定数å—çš„ä½�æ•°å�Žï¼Œç»“æžœå€¼ä¼šæ ¹æ�® round() 函数å�Œæ ·çš„规则进行四èˆ�五入å�Žè¿”回。比如:
>>> x
1234.56789
>>> format(x, '0.1f')
'1234.6'
>>> format(-x, '0.1f')
'-1234.6'
>>>
包å�«å�ƒä½�ç¬¦çš„æ ¼å¼�化跟本地化没有关系。
å¦‚æžœä½ éœ€è¦�æ ¹æ�®åœ°åŒºæ�¥æ˜¾ç¤ºå�ƒä½�ç¬¦ï¼Œä½ éœ€è¦�自己去调查下 locale 模å�—ä¸çš„函数了。
ä½ å�Œæ ·ä¹Ÿå�¯ä»¥ä½¿ç”¨å—符串的 translate() 方法æ�¥äº¤æ�¢å�ƒä½�符。比如:
>>> swap_separators = { ord('.'):',', ord(','):'.' }
>>> format(x, ',').translate(swap_separators)
'1.234,56789'
>>>
在很多Python代ç �ä¸ä¼šçœ‹åˆ°ä½¿ç”¨%æ�¥æ ¼å¼�化数å—的,比如:
>>> '%0.2f' % x
'1234.57'
>>> '%10.1f' % x
' 1234.6'
>>> '%-10.1f' % x
'1234.6 '
>>>
è¿™ç§�æ ¼å¼�化方法也是å�¯è¡Œçš„,ä¸�è¿‡æ¯”æ›´åŠ å…ˆè¿›çš„ format() è¦�差一点。
比如,在使用%æ“�ä½œç¬¦æ ¼å¼�化数å—的时候,一些特性(æ·»åŠ å�ƒä½�符)å¹¶ä¸�能被支æŒ�。