Python字符串格式化修剪浮点精度不超过需要

时间:2016-10-13 19:20:17

标签: python string string-formatting

什么是将浮点数转换为字符串的最佳方法,其精度不超过表示数字所需的精度,并且永远不会超过指定的上限精度,以便发生以下情况?

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

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

rstrip str.format版本是否符合您的要求?如,

'{:0.6f}'.format(num).rstrip('0').rstrip('.')

答案 1 :(得分:1)

我不相信有内置选项,但您可以使用string.rstrip从浮点数的正常字符串表示中删除尾随零。

编辑:在使用string.rstrip之前,您还需要使用%f格式标记将其格式化为固定的最大精度。