27

我需要在 python 中做一些小数位格式。优选地,浮点值应始终显示至少一个起始 0 和一个小数位。例子:

Input: 0
Output: 0.0

具有更多小数位的值应继续显示它们,直到它得到 4。所以:

Input: 65.53
Output: 65.53

Input: 40.355435
Output: 40.3554

我知道我可以使用 {0.4f} 让它打印到小数点后四位,但它会用不需要的 0 填充。是否有格式代码告诉它打印出一定数量的小数,但如果没有数据则将它们留空?我相信 C# 可以通过以下方式实现这一点:

floatValue.ToString("0.0###")

其中 # 符号表示可以留空的地方。

4

4 回答 4

32

你所要求的应该通过像内置round函数这样的舍入方法来解决。然后让float数字以其string表示形式自然显示。

>>> round(65.53, 4)  # num decimal <= precision, do nothing
'65.53'
>>> round(40.355435, 4)  # num decimal > precision, round
'40.3554'
>>> round(0, 4)  # note: converts int to float
'0.0'
于 2012-05-08T20:07:04.353 回答
8

对不起,我能做的最好的:

' {:0.4f}'.format(1./2.).rstrip('0')

更正:

ff=1./2.
' {:0.4f}'.format(ff).rstrip('0')+'0'[0:(ff%1==0)]
于 2012-05-08T19:24:56.317 回答
1

通过反复试验,我认为:.15g这就是您想要的:

In: f"{3/4:.15g}"
Out: '0.75'

In f"{355/113:.15g}"
Out: '3.14159292035398'

(同时f"{3/4:.15f}" == '0.750000000000000'

于 2021-07-30T21:44:47.597 回答
0
>>> def pad(float, front = 0, end = 4):
    s = '%%%s.%sf' % (front, end) % float
    i = len(s)
    while i > 0 and s[i - 1] == '0':
        i-= 1
    if s[i - 1] == '.' and len(s) > i:
        i+= 1 # for 0.0
    return s[:i] + ' ' * (len(s) - i)

>>> pad(0, 3, 4)
'0.0   '
>>> pad(65.53, 3, 4)
'65.53  '
>>> pad(40.355435, 3, 4)
'40.3554'
于 2012-05-08T19:45:41.227 回答