Przeliczanie Float na dolary i centy

Po pierwsze, wypróbowałem ten post (m.in.): formatowanie waluty w Pythonie . To nie ma wpływu na moją zmienną. Domyślam się, że to dlatego, że używam Pythona 3 i to był kod dla Pythona 2. (Chyba, że coś przeoczyłem, bo jestem nowy w Pythonie).

Chcę przekonwertować float, taki jak 1234.5, na String, taki jak"$1,234.50". Jak miałbym to zrobić?

I na wszelki wypadek, Oto Mój kod, który skompilował, ale nie wpływ na moją zmienną:

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

Także:

money = float(1234.5)
print(money) #output is 1234.5
'${:,.2f}'.format(money)
print(money) #output is 1234.5
Author: Community, 2014-01-18

4 answers

W Pythonie 3.x i 2.7, można to po prostu zrobić:

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

:, dodaje przecinek jako separator tysięcy, a .2f ogranicza łańcuch do dwóch miejsc po przecinku (lub dodaje tyle zer, aby uzyskać do 2 miejsc po przecinku, w zależności od przypadku) na końcu.

 79
Author: πόδας ὠκύς,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-18 18:57:37

Bazując na przykładzie @ JustinBarber i zauważając @eric.komentarz fredericha, jeśli chcesz sformatować wartości ujemne jak -$1,000.00 zamiast $-1,000.00 i nie chcesz używać locale:

def as_currency(amount):
    if amount >= 0:
        return '${:,.2f}'.format(amount)
    else:
        return '-${:,.2f}'.format(-amount)
 9
Author: Alec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-19 16:38:24

W Pythonie 3 możesz użyć:

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

Wyjście

'$1,234.50'
 5
Author: Lewis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-17 22:31:49

Powiedziałeś, że:

`mony = float(1234.5)
print(money)      #output is 1234.5
'${:,.2f}'.format(money)
print(money)
Nie zadziałało.... Kodowałeś dokładnie w ten sposób? To powinno zadziałać (patrz mała różnica):
money = float(1234.5)      #next you used format without printing, nor affecting value of "money"
amountAsFormattedString = '${:,.2f}'.format(money)
print( amountAsFormattedString )
 -3
Author: Ariel Robaldo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-21 00:08:06