25

Прежде всего, я пробовал этот пост (среди прочих): Currency formatting in Python. Это не влияет на мою переменную. Мое лучшее предположение, что это потому, что я использую Python 3, и это был код для Python 2. (Если я ничего не заметил, потому что я новичок в Python).Преобразование Float в доллары и центы

Я хочу преобразовать поплавок, например 1234.5, в строку, например «$ 1,234.50». Как мне это сделать?

И только в том случае, вот мой код, который составлен, но не влияет на мою переменную:

money = float(1234.5) 
locale.setlocale(locale.LC_ALL, '') 
locale.currency(money, grouping=True) 

Также безуспешными:

money = float(1234.5) 
print(money) #output is 1234.5 
'${:,.2f}'.format(money) 
print(money) #output is 1234.5 
+0

Последний вариант работает как в Python 2.7 и 3.3. –

+0

не работает, как описано в вашем ответе – Evorlor

+0

Что-то еще происходит с вашим кодом. Можете ли вы опубликовать больше контекста? –

ответ

57

В Python 3.x и 2.7, вам может просто сделать это:

>>> '${:,.2f}'.format(1234.5) 
'$1,234.50' 

:, добавляет запятую в качестве сен тысячи arator, а .2f ограничивает строку до двух знаков после запятой (или добавляет достаточное количество нулей, чтобы довести до 2 десятичных знаков, в зависимости от случая) в конце.

+0

'$ {:,. 2f}'. Format (money) после money = float (1234.5) не влияет. Я сделал ошибку? – Evorlor

+0

@Evorlor Да, это работает для меня как в Python 3.3, так и в 2.7. Вы назначили деньги переменной, которую нужно распечатать? –

+0

Да, я сделал и подтвердил, что, печатая деньги до и после – Evorlor

7

Опираясь на @ JustinBarber пример М. и отмечая @ комментарий eric.frederich, в если вы хотите форматировать отрицательные значения, как -$1,000.00, а не $-1,000.00 и не хотите использовать locale:

def as_currency(amount): 
    if amount >= 0: 
     return '${:,.2f}'.format(amount) 
    else: 
     return '-${:,.2f}'.format(-amount) 
+4

Nice ... который заставил меня задуматься о том, чтобы сделать это в щепотке без def ... boolean slicing ... "{} $ {:,. 2f}". Format (["", "-"] [amount <0], abs (количество)) – NaN

+0

@NaN Очень креативный, спасибо. – dmcmulle

3

В Python 3, вы можно использовать:

import locale 
locale.setlocale(locale.LC_ALL, 'English_United States.1252') 
locale.currency(1234.50, grouping = True) 

Выход

'$1,234.50' 
-2

вы сказали, что:

`mony = float(1234.5) 
print(money)  #output is 1234.5 
'${:,.2f}'.format(money) 
print(money) 

не работает .... Вы закодирован именно таким образом? Это должно работать (см маленькую разницу):

money = float(1234.5)  #next you used format without printing, nor affecting value of "money" 
amountAsFormattedString = '${:,.2f}'.format(money) 
print(amountAsFormattedString) 
Смежные вопросы