Währungsformate formatieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

Hallo,

ich möchte gerne Währungsformate aus Integerwerte berechnen. Dazu rechne ich z.B. 1200*0.01 und dann soll der Wert von 12.00 wie folgt als Währung ausgeben werden

Code: Alles auswählen

>>> locale.setlocale(locale.LC_ALL, 'deu_deu')
'German_Germany.1252'
>>> c = locale.currency(12.5)
>>> print(str(c))
12,50 ?
Warum wird hier statt dem Eurozeichen ein Fragezeichen dargestellt. Wie kann ich das beheben. An dieser Stelle muss ich sagen, dass hier python 3.6.0 für Windows verwendete wird. Wie es auf anderen Plattformen aussieht, kann ich erst heute Abend testen ;)

Meine Frage ist nun, wie kann ich den Wert in "12,00 EU" oder "12,00 €" umwandeln?

VG niesel
BlackJack

@nieselfriem: Warum rufst Du denn `str()` auf? Was wird ausgegeben wenn Du den `str()`-Aufruf durch einen `ascii()`-Aufruf ersetzt?
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das müsste funktionieren:

Code: Alles auswählen

locale.setlocale(locale.LC_ALL, 'german')
print(locale.currency(12.5))
deu_deu aber eigentlich auch.

Eventuell mal die Eingabeaufforderung komplett neustarten. Möglicherweise wurde etwas verstellt.
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

hat sich geklärt,

die Darstellung, dass es ein "?" statt dem "€" in der Windows-cmd probelm zu sein. Wird dieser Wert als String an ein QT Element weiter gegeben funktioniert es einwandfrei

Danke für die Hilfe
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Hatte ich auch schon. cmd.exe verhält sich nach längerem Gebrauch manchmal seltsam. Wie gesagt: Oft hilft dann die Überprüfung in einer neugestarteten cmd.exe.
BlackJack

@snafu: Das hat mit der CMD und mit 'german' vs 'deu_deu' nichts zu tun sondern mit Kodierungen und das man die halt nicht raten kann/sollte. Und eventuell auch damit das nicht jede Kodierung auch alle Zeichen kodieren kann.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

setlocale() stellt doch die Zeichenkodierung *und* die Art, wie sich sprachspezifische Funtionen verhalten, um. Insofern wäre ich bisher schon davon ausgegangen, dass es etwas damit zu tun hat...

Und raten muss ich nicht wirklich, wenn ich weiß, dass ich eine deutsche Kodierung will. Das Raten spielt doch erst eine Rolle, wenn man sprachlich (bzw kodierungsmäßig) unbekannte Quellen bearbeiten muss.
BlackJack

@snafu: `setlocale()` mag die Kodierung umstellen, aber doch nur für das eigene Programm. Und in wie weit Python weiss welche Kodierung da kommt wenn man sie nicht angibt, weiss ich auch nicht. 'german' oder 'deu_deu' sind jedenfalls keine Kodierungen. Was das Programm das am anderen Ende von `stdout` auf Bytes wartet, weiss man dadurch nicht. Das ist eine ”sprachlich unbekannte Quelle”, oder Senke in diesem Fall. Und eine „deutsche Kodierung“ gibt es nicht.
Antworten