下面是一行一行地擊穿:
def intF(n, d, l=40):
很明顯的。 n
是一個數字,d
是另一個數字(除數),l
是小數點後打印的位數。
s=str(n*10**l/d)
這有點不尋常。不是依靠浮點運算,而是將n
乘以10 ** l
,即乘以1
,然後乘以l
數字。這樣最終的結果將不會有任何浮點錯誤 - 假設d
始終是一個整數。 (但是,當然,任何剩餘的數字被截斷另外,在Python 3 //
取代/
以獲得相同的行爲。)
在這一點上,s
將是一個整數的字符串表示 - 再次假設d
被一個整數 - 但它將具有相同的數字作爲float(n)/d
的結果。所以現在我們只需要在正確的位置插入小數點。
if len(s) < l:
return '0.{:0>{width}}'.format(s,width=l)
如果s
的長度小於l
,那麼我們就需要墊,並在前面加上一個0.
。這就是這樣做的。 {:0>{width}}
字段表示創建寬度爲width
的零填充字段,並在其右側(>
)一側插入一個值。然後s
通過format
傳入,我們得到了我們的結果。
if len(s) > l:
return s[0:len(s)-l]+'.'+s[len(s)-l:]
如果a
長度大於l
大,那麼我們需要插入小數點在正確的位置。這就是這樣做的。它從s
中刪除尾隨的l
數字,追加.
,然後附加其餘的l
數字。
return '0.'+s
最後一種可能性是s
正是l
位數。在這種情況下,我們不需要做任何填充;我們可以預先配置一個0
和一個小數點。
最後要注意:如果你通過什麼,但整數此功能,預計將無法正常工作。試想一下:
>>> intF(10, 10.1, 10)
'990.0990099.01'
或者這樣:
>>> intF(10.1, 10, 10)
'101.00000000.0'
沒有任何循環。 –
@ daniel我的意思是if語句返回的內容 – 321