Kommazahlen parsen

03/10/2007 - 21:20 von Nicolas Pavlidis | Report spam
Hi!

Ist zwar eine seltsame Frage, aber wie parst man Kommazahlen :-). Ums
konkreter zu machen, wie unterstütze ich sauber, verschiedene Formate
für den Dezimalpunkt.

Ich habe heute eine recht seltsame Erfahrung gemacht:

string englishFloat = "0.1";
string germanFloat = "0,1";

Ein Double.Parse(englishFloat) liefert 1, ein Double.Parse(germanFloat)
liefert 0.1.

Abgesehen davon, dass beim Parsen der englischen Darstellung das "0."
einfach weggeworfen wurde, auch bei z.B "1.1" kam 11 als Wert heraus,
was ich ein bissi gaudig finde, ich schieb das mal auf das Tausender -
Trennzeichen, gibt es eine Möglichkeit solche Dinge sauber zu unterstützen?

Derweil mach ich nix anderes, wenn in einer Zahl ein "." vorkomt, setze
ich Thread.CurrentThread.CurrentCulture auf ein Culture("en-US"), sond
auf eine Culture("de-DE"), und setze am Schluss das ganze zurück auf die
original Culture.

Das ganze liegt wohl an meinem deutschen Windows XP, aber dem User will
ich auch nit zu muten, dass er für meine Applikation die Sprach und
Làndereinstellungen àndert, aber für einen Techniker ist wohl die
Notation mit "." dennoch familàrer, als jene mit Beistrich, allerdings
bin ich mir sicher, dass jemand auf diese Idee kommen wird.

Gibts für mein Problem eine bessere Lösung?

Danke && LG
Nicolas
 

Lesen sie die antworten

#1 Armin Zingler
03/10/2007 - 21:34 | Warnen spam
"Nicolas Pavlidis" schrieb
Hi!

Ist zwar eine seltsame Frage, aber wie parst man Kommazahlen :-).
Ums konkreter zu machen, wie unterstütze ich sauber, verschiedene
Formate für den Dezimalpunkt.

Ich habe heute eine recht seltsame Erfahrung gemacht:

string englishFloat = "0.1";
string germanFloat = "0,1";

Ein Double.Parse(englishFloat) liefert 1, ein
Double.Parse(germanFloat) liefert 0.1.

Abgesehen davon, dass beim Parsen der englischen Darstellung das
"0." einfach weggeworfen wurde, auch bei z.B "1.1" kam 11 als Wert
heraus, was ich ein bissi gaudig finde, ich schieb das mal auf das
Tausender - Trennzeichen, gibt es eine Möglichkeit solche Dinge
sauber zu unterstützen?

Derweil mach ich nix anderes, wenn in einer Zahl ein "." vorkomt,
setze ich Thread.CurrentThread.CurrentCulture auf ein
Culture("en-US"), sond auf eine Culture("de-DE"), und setze am
Schluss das ganze zurück auf die original Culture.

Das ganze liegt wohl an meinem deutschen Windows XP, aber dem User
will ich auch nit zu muten, dass er für meine Applikation die Sprach
und Làndereinstellungen àndert, aber für einen Techniker ist wohl
die Notation mit "." dennoch familàrer, als jene mit Beistrich,
allerdings bin ich mir sicher, dass jemand auf diese Idee kommen
wird.

Gibts für mein Problem eine bessere Lösung?



Wenn ich das oben richtig verstanden habe, suchst du nach einem "." im
String? Warum weißt du nicht _vorher_, in welchem Format die Zahl vorliegt?

Falls es das Englische Format ist, dann:

Dim en As New Globalization.CultureInfo("en-US")
Dim d As Double

d = System.Double.Parse("1.0", en)

Oder System.Globalization.CultureInfo.InvariantCulture verwenden.

Die Sprach-/Làndereinstellungen des Systems müssen nicht geàndert werden.


Armin

Ähnliche fragen