在Python中设置浮点值的格式,最大小数位数,且无额外的零填充

在Python中设置浮点值的格式,最大小数位数,且无额外的零填充,python,string-formatting,padding,Python,String Formatting,Padding,我需要用python做一些小数位格式。优选地,浮点值应始终显示至少一个起始0和一个小数位。例如: Input: 0 Output: 0.0 小数位数更多的值应继续显示,直到它变为4。因此: Input: 65.53 Output: 65.53 Input: 40.355435 Output: 40.3554 我知道我可以使用{0.4f}将它打印到小数点后四位,但它将填充不需要的0。是否有格式化代码告诉它打印出一定数量的小数,但如果没有数据,则将其保留为空?我相信C#可以通过以下方式实现这一

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

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

对不起,我只能这样做:

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

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

您所要求的应该通过舍入方法(如内置函数)来解决。然后让
浮点数
自然地显示其
字符串
表示形式

>>四舍五入(65.53,4)#小数位数>>四舍五入(40.355435,4)#小数位数>精度,四舍五入
'40.3554'
>>>四舍五入(0,4)#注意:将int转换为float
'0.0'

您已经完成了大部分工作。他的C#示例将
1
格式设置为
'1.0'
,而您的C#示例将其格式设置为
'1.
.float('{:0.4f}.format(x).rstrip('0')。这也应该解决传递int的问题。>>float({:0.4f})。格式(1.rstrip('0'))1。0@tapan:它返回的是一个浮点,而不是字符串。您已经完成了大部分操作。他的C#示例将
1.0
格式化为
'1.0'
,而您的C#示例将其格式化为
'1.
。有趣的解决方案。它适用于整数,但尝试传入一个值,例如2.5,似乎总是返回
None
。我再多看看。我有点希望format函数中内置了一些东西来处理这个问题。哦,对不起-我从我的pyshell中复制了它,它看起来与选项卡配合得很好,但它破坏了标识。现在似乎可以工作了。除非有人能想出一个更适合我的解决方案,否则我会给出答案。。。。。。是 啊是的,就是这样。我一直在寻找格式化,因为原始代码就是这样完成的,但这正是我想要的。我猜你可以称之为脑屁。这不起作用<代码>四舍五入(0.000000001,4)给出
0.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'