2011-12-06 60 views
4

我正在閱讀wrox Beginning Python一書。在第2章中,示例狀態爲在python中顯示小數範圍內

>>> print "$.03f" & 30.0
$30.001 

但是,這並不能解釋命令的行爲。當.3和.003等在shell中具有相同的行爲時,爲什麼要使用.03?此外,它不能解釋時,我只是用3

>>> print "%.03f" % (2.34567891) 
2.346 
>>> print "%.003f" % (2.34567891) 
2.346 
>>> print "%.0003f" % (2.34567891) 
2.346 
>>> print "%.3f" % (2.34567891) 
2.346 
>>> print "%3f" % (2.34567891) 
2.345679 

我試圖尋找,但不可能得到的結果,因爲我不知道相關的關鍵字是什麼什麼happends。

+3

的''%經營者被淘汰,慢慢來。我開始使用'format':'print'{:.4}'。format(2.34567891)'。 – Blender

回答

4

0 in '%.03f'什麼都不做。這相當於'%.3f'

至於第二個問題,'%3f'做什麼,它只是指定整個數字的長度,就像在'%3s'中那樣。

>>> '%10f' % 2.3 
' 2.300000' 
>>> len(_) 
10 
>>> 
+0

'%f'的默認值是6。 – Kjuly

1

這是被稱爲字符串格式化串內插的特徵。其文檔可以找到here。它的作用非常類似於C函數printf的格式字符串。

+2

我不認爲他問這麼多的字符串插值是什麼,爲什麼它被'.03'和'.3'格式化,它產生相同的輸出。 –

1

我不認爲「%.3f」,「%.03f」和「%0.003f」有什麼區別當中,數小數點後:如果你把它再變得清晰點由printf-family處理爲數字,所以3 == 03 == 003.但是,「%.0f」將截斷小數位數。另外,「%.f」與「%f」不同。

但是,「03」表示不printf的家庭無用的,它在你的榜樣墊在號碼前面零如果必要的話要打印,

>>> print "%5d" % (123) 
    123 
>>> print "%05d" % (123) 
0
>>> print "%5d" % (123456) 
123456 

「%3F」不一樣作爲「%5d」在我的東西。它打印一個至少三個數字的字符串。所以,如果在格式字符串中省略小數點

>>> print "%3f" % (2.34567891) 
2.345679 
>>> print "%3.f" % (2.34567891) 
    2 
>>> print "%3.1f" % (2.34567891) 
2.3 
>>> print "%3.2f" % (2.34567891) 
2.35 
>>> print "%3.3f" % (2.34567891) 
2.346 
>>> print "%30f" % (2.34567891) 
         2.345679 
>>> print "%30.8f" % (2.34567891) 
        2.34567891 
>>> print "%30.9f" % (2.34567891) 
        2.345678910 

不要忘了,默認的小數位爲6

相關問題