Hallo,
gibt es in Django eine einfache Möglichkeit Zahlen bei der Ausgabe in Templates zu optimieren??? Habe mal nach einem Template-Filter geschaut, aber keinen gefunden.
Sprich dass zum Beispiel
156968.89
als
156.968,89
dargestellt wird.
Sollte Django dafür kein "Werkzeug" bieten, gibt es dafür vielleicht eine Funktion oder ähnliches in Python selbst, sodass ich die Formatierung in Views anpassen könnte???
[Django]Möglichkeit zur Optimierung der Zahlendarstellung?
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Ist glaube ich in Bearbeitung, kannst du dir aber auch selber schreiben:
Code: Alles auswählen
In [1]: import locale
In [6]: locale.setlocale(locale.LC_ALL, 'de_DE.utf8')
Out[6]: 'de_DE.utf8'
In [11]: locale.format('%f', 12374234928234.018348, True)
Out[11]: '12.374.234.928.234,017578
Cool danke funktioniert so.
Jetzt würde ich nur noch gerne den Hintergrund wissen, sprich die Funktionen genauer verstehen, da ich nicht gerne unwissend Code übernehme.
Kann da jemand erklären oder hat direkt den Link zu einer Referenz!?
Wenn nicht Google ich einfach
Jetzt würde ich nur noch gerne den Hintergrund wissen, sprich die Funktionen genauer verstehen, da ich nicht gerne unwissend Code übernehme.
Kann da jemand erklären oder hat direkt den Link zu einer Referenz!?
Wenn nicht Google ich einfach
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
Selber schreiben ist aber nicht so schön, endete bei mir inDauerbaustelle hat geschrieben:Ist glaube ich in Bearbeitung, kannst du dir aber auch selber schreiben:
Code: Alles auswählen
def format_int(value):
if value is None:
return "0"
else:
str_ = str(value)
num_fragments, start = divmod(len(str_), 3)
tmp = start
fragments = []
if start:
fragments.append(str_[0:start])
for i in range(1, num_fragments + 1):
fragments.append(str_[tmp:tmp + 3])
tmp = tmp + 3
return ".".join(fragments)
-
- User
- Beiträge: 996
- Registriert: Mittwoch 9. Januar 2008, 13:48
*hust*Darii hat geschrieben:das geht bestimmt auch irgendwie kürzer.
Code: Alles auswählen
In [1]: import locale In [6]: locale.setlocale(locale.LC_ALL, 'de_DE.utf8') Out[6]: 'de_DE.utf8' In [11]: locale.format('%d', 12374234928234, True) Out[11]: '12.374.234.928.234
Wobei man da natürlich beachten muss, dass man für die gesamte Anwendung die `locale` umschaltet, was Auswirkungen anderswo haben kann, und dass die Angabe 'de_DE.utf8' nicht portabel ist. Nicht einmal innerhalb von Linux-Systemen.
Man kann das Babel-Paket für diese Zwecke nutzen:
Code: Alles auswählen
>>> format_decimal(10000.12345, locale='de_DE')
u'10.000,123'
>>> format_decimal(10000.12345, locale='en_GB')
u'10,000.123'
>>> format_decimal(10000.12345, locale='ru_RU')
u'10\xa0000,123'
Hier ein Selbstschreiben-Vorschlag ohne locale:
Stefan
Code: Alles auswählen
def fmt(n, digits=2, dec_sep=",", grp_sep="."):
a, b = ("%.*f" % (digits, n)).split(".")
a = "".join(reversed([c if not i or i % 3 else c + grp_sep for i, c in enumerate(reversed(a))]))
return dec_sep.join((a, b))
print fmt(2456.4567)
Ja.ferix hat geschrieben:Sehe ich das nach lesen dieser Beiträge richtig, dass eine Verwendung über local und setlocale eher ungünstig ist und unter Umständen zu Problemen führen könnte?
Entweder eine selbst geschriebene Variante, oder du verwendest Babel.Demnach eine selbst geschriebene Variante verwenden?
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Weitere Lösungsvarianten hier: http://www.python-forum.de/viewtopic.php?t=371