2011-06-02 28 views
0

我一直在尋找一種方法在python中獲得一個十進制數的逗號右側只有4位數字,但我找不到。承擔了這個帖子一看,--->Rounding decimals with new Python format function ,但功能寫有...獲取數字位數

>>> n = 4 
    >>> p = math.pi 
    >>> '{0:.{1}f}'.format(p, n) 
    '3.1416' 

...好像不是在我的情況下工作。

我導入模塊「數學」和「小數」,但也許我錯過了一些其他導入,但我不知道他們哪些導入。

謝謝大家,並很抱歉,如果這個問題已經發布。

PEIXE

+0

'似乎不是我的工作case.'什麼是不工作?你得到什麼錯誤?請提供更多細節。 – mouad 2011-06-02 08:43:10

+0

這可能是因爲你使用的是Python 2而不是Python 3. – Robin 2011-06-02 08:49:22

+0

這是當我將函數傳遞給我的數據時得到的錯誤...: AttributeError:'str'對象沒有屬性'格式' 我只是想在列表中總結一些數字,我需要他們有相同數量的小數。 這就是所有......;) – peixe 2011-06-02 09:27:50

回答

7
"%.3f" % math.pi 

我知道使用舊的語法的,但我個人更喜歡它。

+0

@Jakob Bower:我更喜歡它,但是在OP的方法中,在舍入精度方面存在細微的差異(或者錯誤? '「%.4f」%0.11115'將產生0.1111',然而,「%.3f」%0.1115' - >'0.112' ...怪異的 – 2011-06-02 08:49:57

+0

我認爲那只是浮點數,我不知道是否.format它有不同的表現,但仍然浮點數學是不正確的。 – 2011-06-02 08:55:23

+0

@Jakob Bower:嗯,我很天真地期望str.format的行爲會有所不同:)順便說一句,''%.xf「%round(float,x)'對於這樣的'邊緣'情況好嗎? – 2011-06-02 09:21:48

1

如果你只想要一個浮動的其餘部分,你可以轉換成字符串和分裂的'.'

>>> str(math.pi).split('.')[1][:4] 
<<< '1415' 

decimal.Decimal

>>> Decimal(math.pi).as_tuple()[1][1:5] 
<<< (1, 4, 1, 5) 
2

你有什麼是好的(四捨五入5最多6)

如果你想要截斷而不是四捨五入你可以去:

from math import pi as p 
print p 
print int(p*10**4)/10.0**4 

p=str(p).split(".") 
p[1]=p[1][:4] 
print ".".join(p) 

輸出:

3.14159265359

3.1415

3.1415

+0

嘿,這個解決方案也做了這個工作!這很好,很簡單! – peixe 2011-06-02 09:32:12

+0

謝謝,我不確定你是否想要四捨五入。如果你喜歡,可以投票。 – 2011-06-02 09:42:23

+0

我想upvote,但我需要15聲望,它說...;) – peixe 2011-06-02 10:11:16