我如何格式化一个浮点数,使它不包含尾随零?换句话说,我希望得到的字符串尽可能短。
例如:
3 -> "3"
3. -> "3"
3.0 -> "3"
3.1 -> "3.1"
3.14 -> "3.14"
3.140 -> "3.14"
我如何格式化一个浮点数,使它不包含尾随零?换句话说,我希望得到的字符串尽可能短。
例如:
3 -> "3"
3. -> "3"
3.0 -> "3"
3.1 -> "3.1"
3.14 -> "3.14"
3.140 -> "3.14"
当前回答
试试最简单、可能也是最有效的方法怎么样? normalize()方法删除所有最右边的尾随零。
from decimal import Decimal
print (Decimal('0.001000').normalize())
# Result: 0.001
适用于Python 2和Python 3。
——更新——
正如@BobStein-VisiBone指出的那样,唯一的问题是,像10,100,1000这样的数字……将以指数形式显示。使用下面的函数可以很容易地解决这个问题:
from decimal import Decimal
def format_float(f):
d = Decimal(str(f));
return d.quantize(Decimal(1)) if d == d.to_integral() else d.normalize()
其他回答
你可以简单地使用format()来实现:
格式(3.140,'.10g'),其中10是您想要的精度。
对于float,你可以使用这个:
def format_float(num):
return ('%i' if num == int(num) else '%s') % num
测试:
>>> format_float(1.00000)
'1'
>>> format_float(1.1234567890000000000)
'1.123456789'
Decimal参见解决方案:https://stackoverflow.com/a/42668598/5917543
你可以使用%g来实现:
'%g'%(3.140)
或者,Python≥2.6:
'{0:g}'.format(3.140)
或者,Python≥3.6:
f'{3.140:g}'
格式:g cause (among other things)
不重要的后面的零[是] 从意义上移除,和 如果有,小数点也会被移除 后面没有剩余数字。
这里有一个对我有用的解决办法。它混合了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
如果你能接受3个。3.0以“3.0”的形式出现,这是一种非常简单的方法,从浮点数表示中右移零:
print("%s"%3.140)
(感谢@ellimilial指出了例外情况)