Форматирование строк в Python: отображение цены без десятичных знаков - PullRequest
6 голосов
/ 04 марта 2012

У меня цена в долларах как Decimal с точностью до .01 (в центах)

Я хочу отобразить ее в формате строки, например, с сообщением "You have just bought an item that cost $54.12."

Дело в том, что если цена оказывается круглой, я хочу просто показать ее без центов, как $54.

Как я могу сделать это в Python?Обратите внимание, что я использую Python 2.7, поэтому я был бы рад использовать новый стиль, а не форматирование строк в старом стиле.

Ответы [ 5 ]

6 голосов
/ 04 марта 2012
>>> import decimal
>>> n = decimal.Decimal('54.12') 
>>> print('%g' % n)
'54.12'
>>> n = decimal.Decimal('54.00') 
>>> print('%g' % n)
'54'
1 голос
/ 02 августа 2016

Ответ взят из Десятичный формат Python

>>> a=54.12
>>> x="${:.4g}".format(a)
>>> print x
   $54.12
>>> a=54.00
>>> x="${:.4g}".format(a)
>>> print x
   $54
1 голос
/ 04 марта 2012

Я бы сделал что-то вроде этого:

import decimal

a = decimal.Decimal('54.12')
b = decimal.Decimal('54.00')

for n in (a, b):
    print("You have just bought an item that cost ${0:.{1}f}."
          .format(n, 0 if n == n.to_integral() else 2))

где {0:.{1}f} означает печать первого аргумента в виде числа с плавающей запятой, используя количество десятичных знаков во втором аргументе, а второй аргумент равен 0, когда число фактически равно его целочисленной версии, и 2, когда не является каким Я верю, это то, что вы ищете.

Вывод:

Вы только что купили предмет стоимостью 54,12 доллара.

Вы только что купили предмет стоимостью 54 $

0 голосов
/ 04 марта 2012

Это то, что вы хотите?

Примечание : x - первоначальная цена.

round = x + 0.5
s = str(round)
dot = s.find('.')
print(s[ : dot])
0 голосов
/ 04 марта 2012
>>> dollars = Decimal(repr(54.12))
>>> print "You have just bought an item that cost ${}.".format(dollars)
You have just bought an item that cost $54.12.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...