[Python-de] locale LC_NUMERIC Strategien

Andreas Kaiser akaiser at vocote.de
Mit Dez 14 13:04:54 CET 2005


Hallo,

welche Strategien setzt ihr ein, um in floats aus dem Komma einen 
Punkt zu machen und umgekehrt.

Folgendes Problem:
Eine Anwendung mit wxPython als GUI. Die GUI nimmt Werte über 
Eingabefelder Werte entgegen. Die Eingabefelder geben aber immer einen 
String zurück. Da es viele Eingabefelder sind, benutze ich zum 
Auslesen der Werte eine Schleife, die über die Felder läuft. Somit 
kann ich nur unterscheiden, ob ich ein TextCrtl auslese oder ob es 
sich um eine CheckBox handelt. Innerhalb der TextCrtls kann ich [ich 
habe jedenfalls noch keinen Weg gefunden :( ] kann ich dann nicht mehr 
unterscheiden, ob hier ein String oder eine Zahl vorkommt:

<code>
         self.ctrlProperties = {
             'descr': self.txtDescr,
             'dim1': self.txtDim1,
             'dim2': self.txtDim2,
             'dim34formula': self.chkDim34Formula}

         data = {}
         for key, value in self.ctrlProperties.iteritems():
             #print key, value.GetValue(), type(value.GetValue())
             if (isinstance(value.GetValue(), unicode)):
                 val = value.GetValue().encode('utf-8')
             if (isinstance(value.GetValue(), bool)):
                 if value.GetValue() == True:
                     val = 1
                 else:
                     val = 0
             data[key] = val
         ret = self.bo.updateTool(data, self.toolId)
</code>

dim1 und dim2 sind float, descr ist String, dim34formula ist eine 
Checkbox: also Integer.

Ich suche nun den Weg, die floats mit '.' als Dezimaltrenner zu 
versorgen, damit sie richtig in eine DB geschrieben werden können.
Der Rückweg: DB float mit '.' ---> Anzeige in einem Textfeld mit ',' 
ist mir auch noch nicht ganz klar.

Eine einfache Lösung mit replace() gefällt mir nicht so richtig. Ich 
würde hier gern mit der LC_NUMERIC Funktionalität (format) arbeiten.

Wie behandelt ihr solche Umwandlungen?

Gruß
Andreas