Hi Dookie!
Auch noch so spät wach...
Dookie hat geschrieben:woran erkennst Du bei Deinen Beispielen bei 123.123 --> 123123 daß der Punkt kein Komma sondern der Tausenderseperator ist?
Du hast recht, bei diesem Beispiel erkennt man nicht ob Tausenderpunkt oder Dezimalzeichen. Ich habe es nachkorrigiert.
Dookie hat geschrieben:Drei Zeilen darunter 123.123,010 --> 123123.01 ist das Komma ein Komma obwohl auch hier noch drei Stellen nach dem Komma kommen!
Hier ist der Fall eindeutig. In diesem Beispiel gibt es einen Punkt
und einen Beistrich. Das äußerst rechts stehende Zeichen ist folglich das Dezimalzeichen.
Dookie hat geschrieben:Für Umwandlungen, die die localen Einstellungen berücksichtingen gibts das Modul
locale
Leider kann/möchte ich nicht davon ausgehen, dass diese Strings sich an die lokalen Einstellungen halten. Deshalb dachte ich, dass nur dann, wenn aus dem String
nicht eindeutig hervorgeht, welche Zahl damit gemeint ist, die Locales herangezogen werden. Der Computer soll sich um alles kümmern. Man könnte doch an die Funktion ein Argument übergeben, welches der Funktion mitteilt, was sie im Zweifelsfall tun soll. - - Sollen die Locales herangezogen werden?
- Soll eine Exception ausgelöst werden?
- Soll ein Standardwert zurück gegeben werden?
- Soll ein Standard-Trennzeichen angenommen werden?
Dookie hat geschrieben:ansonst mit einer Funktion, die aber nur Zahlen mit einem Komme (egal ob Punkt oder Komma) umwandelt:
Code: Alles auswählen
def str_to_float(s):
commapos = max(s.rfind("."), s.rfind(","))
return float(s[:commapos].replace(".","").replace(",","") +
"." + s[commapos+1:])
So wie ich diese Funktion sehe, geht sie immer davon aus, dass das äußerst rechts vorkommende Zeichen ein Dezimaltrennzeichen ist und dass immer ein Dezimaltrennzeichen vorkommt, was nicht immer der Fall sein kann. Leider liefert
str_to_float("100") die Zahl
10.1 zurück.
lg
Gerold
