Currency Werte auf MacOs X

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

Moin, Moin,

ich arbeite an einem kleinen Programm bei dem auch Geldbträge in Euro ausgeben werden sollen.

Nun habe ich folgendes Problem.
Wenn ich unter Windows und Linux mit python 3.6.0 folgendes ausführe:

Code: Alles auswählen

import locale
locale.setlocale(locale.LC_ALL, 'de_DE') #unter MacOSX
locale.setlocale(locale.LC_ALL, 'deu_deu') #unter Windows/Linux
print(locale.currency(12.5))
Eu12,50#MacOSx
12,50 €#Windows/Linux
Warum verhält sich python 3.6.0 unter den Plattformen so unterschiedlich? Wie kann ich auch unter MacOsX die Darstellung 12,50 € hinbekommen?

VG niesel
Sirius3
User
Beiträge: 18299
Registriert: Sonntag 21. Oktober 2012, 17:20

@nieselfriem: das ist nicht Python, sondern das Betriebssystem hat unterschiedliche Einstellungen für seine Lokale. Normalerweise sollte ein Programm gar nicht an diesen Einstellungen herumfummeln, weil das, sie wie schon gesagt, die Spracheinstellungen des Betriebssystems sind.
Benutzeravatar
nieselfriem
User
Beiträge: 135
Registriert: Sonntag 13. Januar 2013, 16:00

die Frage ist dann ja, wie ist denn unter Python der richtige Weg, Währungswerte richtig darzustellen. Wenn man daran nichts ändern soll? "Normalerweise sollte ein Programm gar nicht an diesen Einstellungen herumfummeln"

VG niesel
Sirius3
User
Beiträge: 18299
Registriert: Sonntag 21. Oktober 2012, 17:20

@nieselfriem: Du gehst auf Einstellungen -> Sprache & Region -> Währung und stellst da ein, wie Du die Währung gerne hättest.
BlackJack

@nieselfriem: Die Einstellungen von Deinem Programm aus plattformübergreifend zu ändern ist nicht wirklich sinnvoll möglich, weil Du nicht weisst was man bei `setlocale()` übergeben muss/kann. Denn auch das hängt sehr vom Betriebssystem ab und da dann auch noch mal welche Locales überhaupt konfiguriert sind und zur Verfügung stehen. Das Linuxsystem bei dem 'deu_deu' funktioniert, gibt es aber ziemlich sicher nicht. 'de_DE' könnte unter Linux funktionieren wenn diese Locale konfiguriert wurde. Das muss aber nicht sein. Ich habe auf meinen Rechnern meistens nur eine englische Locale konfiguriert. Der einzig wirklich portable und damit IMHO sinnvolle Wert bei `setlocale()` ist die leere Zeichenkette um die Locale zu setzen die im System verwendet wird. *Das* funktioniert auf jedem System. Dann formatiert man die Währungswerte so wie der Benutzer das eingestellt hat. Aber Vorsicht: Wenn man Eurowerte ausgeben möchte, muss man dann natürlich auch sicherstellen, das der Benutzer auch Euro als Währung verwendet. Wobei einem dann auch noch passieren kann das im System tatsächlich nur die C Locale existiert, dann hat man verloren.

Wenn Du auf jeden Fall '12,50 €' als Ergebnis haben willst, warum gehst Du dann über Funktionen bei denen ja gerade der Zweck ist, das man die Formatierung so bekommt wie der Benutzer oder mindestens der Administrator des Systems das konfiguriert hat? Formatiere das doch einfach so wie *Du* willst, wenn Du ganz genau weisst wie das aussehen soll.

Ansonsten würde ich etwas betriebssystemunabhängiges wie `babel` verwenden:

Code: Alles auswählen

In [15]: print babel.numbers.format_currency(12.5, 'EUR', locale='de_DE')
12,50 €
Da sind auch die Locale-Namen standardisiert (RFC 4646).
Antworten