Как я могу отформатировать десятичную цифру, чтобы всегда показывать 2 десятичных знака?
Я хочу показать:
49
как 49.00
и
54.9
как 54.90
Независимо от длины десятичного числа или наличия каких-либо десятичных знаков, я хотел бы отобразить Decimal
с двумя десятичными знаками, и я хотел бы сделать это эффективным способом. Цель состоит в том, чтобы отображать денежные значения.
например, 4898489.00
Ответы
Ответ 1
Я полагаю, вы, вероятно, используете Decimal()
объекты из decimal
? (Если вам нужна ровно две цифры точности за десятичной точкой с произвольно большими числами, вы определенно должны быть, и это то, что предлагает ваш вопрос...)
Если это так, раздел Десятичный FAQ в документации содержит пару вопросов/ответов, которая может быть полезна для вас
Q. В приложении с фиксированной точкой с двумя десятичными знаками некоторые входы имеют много мест и должны быть округлены. Другие не должны иметь лишние цифры и должны быть проверены. Какие методы следует использовать?
а. Метод quantize() округляется до фиксированного числа десятичных знаков. Если установлена неточная ловушка, она также полезна для проверки:
>>> TWOPLACES = Decimal(10) ** -2 # same as Decimal('0.01')
>>> # Round to two places
>>> Decimal('3.214').quantize(TWOPLACES)
Decimal('3.21')
>>> # Validate that a number does not exceed two places
>>> Decimal('3.21').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Decimal('3.21')
>>> Decimal('3.214').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Traceback (most recent call last):
...
Inexact: None
Следующий вопрос гласит
Q. Как только у меня есть действующие два входа, как я могу сохранить этот инвариант во всем приложении?
Если вам нужен ответ на этот вопрос (наряду с большим количеством другой полезной информации), см. вышеупомянутый раздел документов. Кроме того, если вы сохраните decimal
с двумя цифрами точности за пределами десятичной точки (что означает столько же точности, сколько необходимо для сохранения всех цифр слева от десятичной точки и двух справа от нее и не более...), то преобразование их в строки с помощью str
будет работать нормально:
str(Decimal('10'))
# -> '10'
str(Decimal('10.00'))
# -> '10.00'
str(Decimal('10.000'))
# -> '10.000'
Ответ 2
Вы должны использовать новые спецификации формата, чтобы определить, как должно быть представлено ваше значение:
>>> from math import pi # pi ~ 3.141592653589793
>>> '{0:.2f}'.format(pi)
'3.14'
Документация иногда может быть немного тупой, поэтому я рекомендую следующие, более удобочитаемые ссылки:
В Python 3.6 введена интерполяция литеральных строк (также называемая f-строками), так что теперь вы можете написать выше еще более кратко:
>>> f'{pi:.2f}'
'3.14'
Ответ 3
Операция "Операции форматирования строк" в документации на Python содержит ответ, который вы ищете. Короче говоря:
"%0.2f" % (num,)
Некоторые примеры:
>>> "%0.2f" % 10
'10.00'
>>> "%0.2f" % 1000
'1000.00'
>>> "%0.2f" % 10.1
'10.10'
>>> "%0.2f" % 10.120
'10.12'
>>> "%0.2f" % 10.126
'10.13'
Ответ 4
Вы можете использовать оператор форматирования строк:
num = 49
x = "%.2f" % num # x is now the string "49.00"
Я не уверен, что вы подразумеваете под "эффективным" - это почти наверняка не является узким местом вашего приложения. Если ваша программа работает медленно, сначала откройте ее, чтобы найти горячие точки, а затем оптимизируйте их.
Ответ 5
>>> print "{:.2f}".format(1.123456)
1.12
Вы можете изменить 2
в 2f
на любое количество десятичных знаков, которые вы хотите показать.
РЕДАКТИРОВАТЬ:
С Python3.6
это переводится как:
>>> print(f"{1.1234:.2f}")
1.12
Ответ 6
.format - более читаемый способ обработки форматирования переменной:
'{:.{prec}f}'.format(26.034, prec=2)
Ответ 7
В Python 3, способ сделать это будет
'{:.2f}'.format(number)
Ответ 8
Если у вас есть несколько параметров, вы можете использовать
print('some string {0:.2f} & {1:.2f}'.format(1.1234,2.345))
>>> some string 1.12 & 2.35
Ответ 9
Самый простой пример, который покажет вам, как это сделать:
Код:
>>> points = 19.5
>>> total = 22
>>>'Correct answers: {:.2%}'.format(points/total)
"
Вывод: правильных ответов: 88,64%
Ответ 10
как насчет
print round(20.2564567 , 2) >>>>>>> 20.25
print round(20.2564567 , 4) >>>>>>> 20.2564