Seite 1 von 1

Betrag/Summe anders darstellen

Verfasst: Mittwoch 30. Juli 2008, 10:26
von fiuman
Hallo zusammen,

bin neu hier und habe gerade mit python angefangen.
Ich will gerade eine große Zahl (30 Millionen) durch Punkte trennen.
Also momentan sieht es so aus 30000000.00 und es soll so aussehen:
30.000.000,00

Ich kenne noch von C diese printf direktiven, geht jetzt hier bei python auch,
%0.2f damit er zwei Nachkommastellen macht. Wie erreiche ich aber diese andere Trennung? Hat da jemand eine Idee?

Vielen Dank.

Mfg,
fiuman

Verfasst: Mittwoch 30. Juli 2008, 10:59
von n4p

Verfasst: Mittwoch 30. Juli 2008, 11:00
von rasco
Hi,

ich habe mir mit einer eigenen Klasse geholfen. Bessere Vorschläge, die aber unter Python 2.3 laufen müssen, würden mich aber auch brennend interessieren.

Hier mein Code:

import locale
import sys

if sys.platform=='win32':
locale.setlocale(locale.LC_NUMERIC,"")
else:
locale.setlocale(locale.LC_ALL,"de_DE")


class IFloat(float):

def __new__(cls,f=0,nk=2):
if type(f) is str:
f = f.replace('.','')
f = f.replace(',','.')
f = float(f)
newFloat = float.__new__(cls,f)
return newFloat

def __init__(self,f,nk=2):
self.nk = nk
if type(f) is str:
f = f.replace('.','')
f = f.replace(',','.')
f = float(f)
self.f = f

def __add__(self,other):
""" Addiert IFloat mit IFloats oder floats.

Die Umgekehrte Richtung float + IFloat liefert wieder einen float
"""
if isinstance(other,IFloat):
if self.nk > other.nk:
return IFloat(self.f + other.f,self.nk)
else:
return IFloat(self.f + other.f,other.nk)
else:
return IFloat(self.f + other,self.nk)

def __str__(self):
if self.nk == 5:
return locale.format("%.5f",self.f,True)
else:
return locale.format("%.2f",self.f,True)


__repr__ = __str__

def get_str(self):
return str(self.f)

Verfasst: Mittwoch 30. Juli 2008, 11:59
von numerix
In diesem Thread findest du alles, was du brauchst:
http://www.python-forum.de/viewtopic.php?p=91832