【问题标题】:Python string format function gives unexpected results when specifying precisionPython 字符串格式函数在指定精度时给出了意想不到的结果
【发布时间】:2014-01-13 18:14:38
【问题描述】:

当我执行这些操作时,我会得到如下所示的预期结果:

>>> '{text:{fill}{align}{width}}'.format(text = 'abcdef', width = 8, fill = '~', align = '^')
'~abcdef~'
>>> '{0:~^8}'.format('abcdef')
'~abcdef~'
>>> '{0:~^8.4}'.format('abcdef')
'~~abcd~~'
>>> '{num:{fill}{align}{width}{type}}'.format(num = 12.34, width = 12, fill = '~', align = '^', type = 'f')
'~12.340000~~'
>>> '{0:~^12.4f}'.format(12.34)
'~~12.3400~~~'

但是,当我动态指定精度时,我得到的输出比预期的要宽:

>>> '{text:{fill}{align}{width}{precision}}'.format(text = 'abcdef', width = 8, fill = '~', align = '^', precision = .4)
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~abcd~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
>>> '{num:{fill}{align}{width}{precision}{type}}'.format(num = 12.34, width = 12, fill = '~', align = '^', type = 'f', precision = .4) 
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~12.3400~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'

我是不是做错了什么,有错误的期望,还是有错误?

我正在使用 Python 2.7.3

【问题讨论】:

    标签: python string format precision


    【解决方案1】:

    您需要将点放在格式字符串中,而不是在分配给precision 时使用十进制值。

    >>> '{text:{fill}{align}{width}.{precision}}'.format(text = 'abcdef', width=8, fill = '~', align = '^', precision = 4)
    '~~abcd~~'
    >>> '{num:{fill}{align}{width}.{precision}{type}}'.format(num = 12.34, width=12, fill = '~', align = '^', type = 'f', precision = 4)
    '~~12.3400~~~'
    

    否则,如果没有点,widthprecision 的字符串表示形式(.4 变为 '0.4')将连接为字符串,结果的整数部分用作宽度。因此,在宽度为 8 且精度为 0.4 的示例中,生成的宽度变为 80(从截断 80.4)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-22
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-19
      • 2017-01-05
      • 2021-10-14
      相关资源
      最近更新 更多