Python string.format()百分比到一个小数位

Ash*_*shy 23 python floating-point string.format

在下面的例子中,我想格式化为1位小数,但python似乎想要将数字四舍五入,有没有办法让它不是数字上升?

>>> '{:.1%}'.format(0.9995)
'100.0%'
>>> '{:.2%}'.format(0.9995)
'99.95%'
Run Code Online (Sandbox Code Playgroud)

谢谢!:)

Mar*_*ers 14

如果要始终向下舍入(而不是舍入到最接近的精度),则使用以下math.floor()函数显式地执行此操作:

from math import floor

def floored_percentage(val, digits):
    val *= 10 ** (digits + 2)
    return '{1:.{0}f}%'.format(digits, floor(val) / 10 ** digits)

print floored_percentage(0.995, 1)
Run Code Online (Sandbox Code Playgroud)

演示:

>>> from math import floor
>>> def floored_percentage(val, digits):
...     val *= 10 ** (digits + 2)
...     return '{1:.{0}f}%'.format(digits, floor(val) / 10 ** digits)
... 
>>> floored_percentage(0.995, 1)
'99.5%'
>>> floored_percentage(0.995, 2)
'99.50%'
>>> floored_percentage(0.99987, 2)
'99.98%'
Run Code Online (Sandbox Code Playgroud)