如何格式化具有最大小数位数且没有额外零填充的浮点?

dwthyt8l  于 2021-08-20  发布在  Java
关注(0)|答案(3)|浏览(353)

我需要用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###")

其中#符号表示可以留空的位置。

insrf1ej

insrf1ej1#

你所要求的应该通过四舍五入的方法来解决,比如内置的 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'
c2e8gylq

c2e8gylq2#

对不起,我只能做到:

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

更正:

ff=1./2.
' {:0.4f}'.format(ff).rstrip('0')+'0'[0:(ff%1==0)]
jqjz2hbq

jqjz2hbq3#

>>> 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'

相关问题