2014-12-02 45 views
1

我想格式化浮點數到嚴格 3或4位小數。浮點格式化爲3或4位小數

例如:

1.0  => 1.000 # 3DP 
1.02 => 1.020 # 3DP 
1.023 => 1.023 # 3DP 
1.0234 => 1.0234 # 4DP 
1.02345 => 1.0234 # 4DP 

'{:.5g}'.format(my_float)'{:.4f}'.format(my_float)的組合的種類。

任何想法?

+0

問題是1.023不是精確的1.023。這意味着你無法從數字本身看出它是否應該有3個或4個小數位。 – 2014-12-02 01:19:58

+0

對不起,我的例子有點簡單。該行爲需要適用於1.0230000000001或1.02299999999997,在4DP中均下降到1.0230,在我的情況下,我想要舍入到3DP。 – 2014-12-02 01:30:17

回答

4

假設我明白你在問什麼,你可以將它格式化爲4,然後刪除尾部'0'(如果有的話)。像這樣:

def fmt_3or4(v): 
    """Format float to 4 decimal places, or 3 if ends with 0.""" 
    s = '{:.4f}'.format(v) 
    if s[-1] == '0': 
     s = s[:-1] 
    return s 

>>> fmt_3or4(1.02345) 
'1.0234' 
>>> fmt_3or4(1.023) 
'1.023' 
>>> fmt_3or4(1.02) 
'1.020'