Python Десятичный формат - PullRequest
60 голосов
/ 05 марта 2010

Какой хороший способ отформатировать десятичный питон, как этот способ?

1,00 -> '1'
1,20 -> '1,2'
1,23 -> '1,23'
1,234 -> '1,23'
1,2345 ->'1,23'

Ответы [ 4 ]

100 голосов
/ 06 марта 2010

Если у вас Python 2.6 или новее, используйте format:

'{0:.3g}'.format(num)

Для Python 2.5 или старше:

'%.3g'%(num)

Пояснение:

{0} говорит format напечатать первый аргумент - в этом случае num.

Все после двоеточия (:) указывает format_spec.

.3 устанавливает точность 3.

g удаляет незначительные нули. Увидеть http://en.wikipedia.org/wiki/Printf#fprintf

Например:

tests=[(1.00, '1'),
       (1.2, '1.2'),
       (1.23, '1.23'),
       (1.234, '1.23'),
       (1.2345, '1.23')]

for num, answer in tests:
    result = '{0:.3g}'.format(num)
    if result != answer:
        print('Error: {0} --> {1} != {2}'.format(num, result, answer))
        exit()
    else:
        print('{0} --> {1}'.format(num,result))

выходы

1.0 --> 1
1.2 --> 1.2
1.23 --> 1.23
1.234 --> 1.23
1.2345 --> 1.23

Используя Python 3.6 или новее, вы можете использовать f-strings:

In [40]: num = 1.234; f'{num:.3g}'
Out[40]: '1.23'
20 голосов
/ 30 ноября 2010

Только первая часть ответа Джастина верна.Использование «% .3g» не будет работать для всех случаев, поскольку .3 - это не точность, а общее количество цифр.Попробуйте это для чисел, таких как 1000.123, и оно сломается.

Итак, я бы использовал то, что предлагает Джастин:

>>> ('%.4f' % 12340.123456).rstrip('0').rstrip('.')
'12340.1235'
>>> ('%.4f' % -400).rstrip('0').rstrip('.')
'-400'
>>> ('%.4f' % 0).rstrip('0').rstrip('.')
'0'
>>> ('%.4f' % .1).rstrip('0').rstrip('.')
'0.1'
12 голосов
/ 06 марта 2010

Вот функция, которая сделает свое дело:

def myformat(x):
    return ('%.2f' % x).rstrip('0').rstrip('.')

А вот ваши примеры:

>>> myformat(1.00)
'1'
>>> myformat(1.20)
'1.2'
>>> myformat(1.23)
'1.23'
>>> myformat(1.234)
'1.23'
>>> myformat(1.2345)
'1.23'

Edit:

Посмотрев на ответы других людей и экспериментировав, я обнаружил, что g делает все зачистки за вас. Таким образом,

'%.3g' % x

тоже работает великолепно и немного отличается от того, что предлагают другие люди (используя материал '{0: .3}'. Format ()). Я думаю, сделай свой выбор.

4 голосов
/ 06 марта 2010

Просто используйте стандартные Python методы форматирования строки :

>>> "{0:.2}".format(1.234232)
'1.2'
>>> "{0:.3}".format(1.234232)
'1.23'

Если вы используете версию Python до 2.6, используйте

>>> "%f" % 1.32423
'1.324230'
>>> "%.2f" % 1.32423
'1.32'
>>> "%d" % 1.32423
'1'
...