Каким образом можно форматировать десятичный десятичный код python таким образом?
1,00 → '1'
1.20 → '1.2'
1.23 → '1.23'
1.234 → '1.23'
1.2345 → '1.23'
Каким образом можно форматировать десятичный десятичный код python таким образом?
1,00 → '1'
1.20 → '1.2'
1.23 → '1.23'
1.234 → '1.23'
1.2345 → '1.23'
Если у вас 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'
Только первая часть ответа Джастина верна. Использование "%.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'
Здесь функция, которая будет делать трюк:
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()). Думаю, сделай выбор.
Просто используйте стандартные стандарты 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'
Если вы можете позволить себе использовать десятичные числа вместо чисел с плавающей запятой, вы можете сохранить точность, присущую самому числу:
>>> from decimal import Decimal
>>> def p(d):
... print("{}".format(Decimal(d)))
>>> p('0.01')
0.01
>>> p('0.0100')
0.0100
>>> p('0.010000000001')
0.010000000001