Подтвердить что ты не робот

Python string.format() до одного десятичного знака

В приведенном ниже примере я хотел бы отформатировать до 1 десятичной точки, но python, похоже, округляет число, есть ли способ сделать это не вокруг номера вверх?

>>> '{:.1%}'.format(0.9995)
'100.0%'
>>> '{:.2%}'.format(0.9995)
'99.95%'

Спасибо!:)

4b9b3361

Ответ 1

Если вы хотите округлить всегда (вместо округления до ближайшей точности), тогда сделайте это, явно, с помощью функции 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)

Демо:

>>> 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%'

Ответ 2

Что-то вроде этого:

def my_format(num, x):
     return str(num*100)[:4 + (x-1)] + '%'

>>> my_format(.9995, 1)
'99.9%'
>>> my_format(.9995, 2)
'99.95%'
>>> my_format(.9999, 1)
'99.9%'
>>> my_format(0.99987, 2)
'99.98%'

Ответ 3

Есть несколько способов, может быть, самый простой

x = str(10. * 0.9995).split('.')
my_string = '%s.%s%%' % (x[0], x[1][:2])

это гарантирует, что вы всегда будете иметь десятичную точку в правильном месте (для краевых случаев, таких как 1.0000 или 0.001)