Seite 1 von 1
Currency Werte auf MacOs X
Verfasst: Montag 13. März 2017, 08:16
von nieselfriem
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
Re: Currency Werte auf MacOs X
Verfasst: Montag 13. März 2017, 08:38
von Sirius3
@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.
Re: Currency Werte auf MacOs X
Verfasst: Montag 13. März 2017, 10:15
von nieselfriem
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
Re: Currency Werte auf MacOs X
Verfasst: Montag 13. März 2017, 10:55
von Sirius3
@nieselfriem: Du gehst auf Einstellungen -> Sprache & Region -> Währung und stellst da ein, wie Du die Währung gerne hättest.
Re: Currency Werte auf MacOs X
Verfasst: Montag 13. März 2017, 11:44
von 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).