Python string.format() до одного десятичного знака
В приведенном ниже примере я хотел бы отформатировать до 1 десятичной точки, но python, похоже, округляет число, есть ли способ сделать это не вокруг номера вверх?
>>> '{:.1%}'.format(0.9995)
'100.0%'
>>> '{:.2%}'.format(0.9995)
'99.95%'
Спасибо!:)
Ответы
Ответ 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
)