Отформатируйте float в Python с максимальным количеством знаков после запятой и без дополнительного заполнения нуля

Мне нужно сделать форматирование десятичных знаков в python. Предпочтительно, значение с плавающей запятой должно всегда показывать, по крайней мере, начальное 0 и одно десятичное место. Пример:

Input: 0
Output: 0.0

Значения с более десятичными знаками должны продолжать показывать их, пока не получится 4. Итак:

Input: 65.53
Output: 65.53

Input: 40.355435
Output: 40.3554

Я знаю, что я могу использовать {0.4f}, чтобы распечатать его до четырех знаков после запятой, но он будет помещаться с ненужными 0. Есть ли код форматирования, чтобы сообщить ему распечатать до определенного количества десятичных знаков, но оставить их пустыми, если нет данных? Я считаю, что С# выполняет это с чем-то вроде:

floatValue.ToString("0.0###")

Где # символ обозначает место, которое может быть пустым.

Ответ 1

То, что вы запрашиваете, должно быть обращено к методам округления, таким как функция round, и пусть число с плавающей точкой естественно отображается с его строковым представлением.

>>> round(65.53, 4)
'65.53'
>>> round(40.355435, 4)
'40.3554'
>>> round(0, 4)
'0.0'

Ответ 2

Извините, лучшее, что я могу сделать:

' {:0.4f}'.format(1./2.).rstrip('0')

Исправлено:

ff=1./2.
' {:0.4f}'.format(ff).rstrip('0')+'0'[0:(ff%1==0)]

Ответ 3

>>> def pad(float, front = 0, end = 4):
    s = '%%%s.%sf' % (front, end) % float
    i = len(s)
    while i > 0 and s[i - 1] == '0':
        i-= 1
    if s[i - 1] == '.' and len(s) > i:
        i+= 1 # for 0.0
    return s[:i] + ' ' * (len(s) - i)

>>> pad(0, 3, 4)
'0.0   '
>>> pad(65.53, 3, 4)
'65.53  '
>>> pad(40.355435, 3, 4)
'40.3554'