Python 字符串格式 trim 浮点精度不超过需要
Python string formatting trim float precision to no more than needed
将浮点数转换为字符串的最佳方法是什么,其精度不超过表示数字所需的精度,并且绝不会超过指定的上限精度,从而发生以下情况?
>>> values = [1, 1., 1.01, 1.00000000001, 1.123456789, 100.123456789]
>>> print([ my_func(value,precision=6) for value in values])
['1', '1', '1.01', '1', '1.123457', '100.123457']
我查看了 str.format
,但只能找到可能包含太多零的特定精度的方法:
>>> '{:0.6f}'.format(1.0)
'1.000000'
g
选项很接近,但是你必须根据整数部分的长度做一些有趣的事情:
def my_func(value,precision=6):
return '{v:0.{p}g}'.format(v=value,p=precision+len('{:d}'.format(int(value))))
有没有更好的方法?
我认为没有内置选项,但您可以使用 string.rstrip
从浮点数的正常字符串表示形式中删除尾随零。
编辑:在使用 string.rstrip
.
之前,您还需要使用 %f 格式化标记将其格式化为固定的最大精度
rstrip
-ing str.format
版本是否符合您的要求?例如,
'{:0.6f}'.format(num).rstrip('0').rstrip('.')
将浮点数转换为字符串的最佳方法是什么,其精度不超过表示数字所需的精度,并且绝不会超过指定的上限精度,从而发生以下情况?
>>> values = [1, 1., 1.01, 1.00000000001, 1.123456789, 100.123456789]
>>> print([ my_func(value,precision=6) for value in values])
['1', '1', '1.01', '1', '1.123457', '100.123457']
我查看了 str.format
,但只能找到可能包含太多零的特定精度的方法:
>>> '{:0.6f}'.format(1.0)
'1.000000'
g
选项很接近,但是你必须根据整数部分的长度做一些有趣的事情:
def my_func(value,precision=6):
return '{v:0.{p}g}'.format(v=value,p=precision+len('{:d}'.format(int(value))))
有没有更好的方法?
我认为没有内置选项,但您可以使用 string.rstrip
从浮点数的正常字符串表示形式中删除尾随零。
编辑:在使用 string.rstrip
.
rstrip
-ing str.format
版本是否符合您的要求?例如,
'{:0.6f}'.format(num).rstrip('0').rstrip('.')