我如何格式化一个浮点数,使它不包含尾随零?换句话说,我希望得到的字符串尽可能短。

例如:

3 -> "3"
3. -> "3"
3.0 -> "3"
3.1 -> "3.1"
3.14 -> "3.14"
3.140 -> "3.14"

当前回答

你可以像这样使用max():

打印(max (int (x), x)

其他回答

你可以使用%g来实现:

'%g'%(3.140)

或者,Python≥2.6:

'{0:g}'.format(3.140)

或者,Python≥3.6:

f'{3.140:g}'

格式:g cause (among other things)

不重要的后面的零[是] 从意义上移除,和 如果有,小数点也会被移除 后面没有剩余数字。

你可以像这样使用max():

打印(max (int (x), x)

使用宽度足够大的%g,例如'%.99g'。 它将以定点符号打印任何相当大的数字。

编辑:它不起作用

>>> '%.99g' % 0.0000001
'9.99999999999999954748111825886258685613938723690807819366455078125e-08'

你可以用最python的方式来实现:

python3:

"{:0.0f}".format(num)

这里有一个对我有用的解决办法。它混合了PolyMesh的解决方案和使用新的.format()语法。

for num in 3, 3., 3.0, 3.1, 3.14, 3.140:
    print('{0:.2f}'.format(num).rstrip('0').rstrip('.'))

输出:

3
3
3
3.1
3.14
3.14