2014-12-02 69 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'