格式字符串中的可变数字位数

时间:2013-02-18 08:37:20

标签: python

这是编写此格式化函数的简洁方法:

def percent(value,digits=0):
    return ('{0:.%d%%}' % digits).format(value)

>>> percent(0.1565)
'16%'

>>> percent(0.1565,2)
'15.65%'

问题是格式化一个给定位数的数字,我不喜欢同时使用'%'运算符和格式化方法。

3 个答案:

答案 0 :(得分:26)

我喜欢这个:

'{0:.{1}%}'.format(value, digits)

测试:

>> '{0:.{1}%}'.format(0.1565, 0)
'16%'
>> '{0:.{1}%}'.format(0.1565, 2)
'15.65%'

答案 1 :(得分:2)

* does what you want,用于printf - 样式字符串格式化。

>>> def percent(value, digits=0):
...     return '%.*f%%' % (digits, value * 100)
...
>>> percent(0.1565, 2)
'15.65%'

高级字符串格式(在PEP 3101中定义并记录在7.1.3. Format String Syntax中)似乎无法在一次传递中执行此操作。 (请参阅7.1.3.1. Format Specification Mini-Languageprecisioninteger。)

答案 2 :(得分:1)

来自docs

  

最小字段宽度(可选)。如果指定为'*'(星号),则   实际宽度是从元组的下一个元素中读取的值,和   要转换的对象是在最小字段宽度和可选之后   精度。

示例:

def percent(value, digits=0):
    print '%.*f%%' % (digits, value*100)
>>> percent(0.1565, 2)
15.65%