【问题标题】:variable number of digit in format string格式字符串中的可变位数
【发布时间】:2013-02-18 08:37:20
【问题描述】:

这是编写此格式化函数的一种干净的方法:

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

>>> percent(0.1565)
'16%'

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

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

【问题讨论】:

  • 你只是不喜欢它?我觉得不错?
  • @Aesthete:不,我不喜欢。

标签: python


【解决方案1】:

我喜欢这个:

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

测试:

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

【讨论】:

  • +1 - 这是如何描述的?简单看一下@format-spec 我不认为嵌套格式规范是有效的,但它无疑是有效的。
  • @sotapme - 在您的链接页面上搜索“嵌套”一词。
  • 当数字是 str 而不是 int 时出现值错误:+1:(所以请确保您的数字是数字)
  • 这特别干净,因为您现在可以以相同的精度格式化多个值,只需提及一次:'{0:.{2}%}, {1:.{2}%}'.format(0.1565, 0.1234, 1) 产生:'15.7%, 12.3%'
【解决方案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-Languageprecision 仅是integer。)

【讨论】:

  • 嗯,它可以一次完成。看我的回答。
  • 精度是指位数。当然 it 是一个整数,但它可以应用到浮点数
  • @gnibbler:我指的是语法:precision ::= integer
【解决方案3】:

来自docs

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

例子:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    相关资源
    最近更新 更多