Hallo, ich probiere gerade ein Tutorial aus: Umwandlung von Text aus Textbox in ein Zahl. Es gehört zu einem Taschenrechner-Tutorial; bei mir geht's nicht. decimal dec = Convert.ToDecimal(textBox1.Tag) + Convert.ToDecimal(textBox1.Text); führt zu: 3 + 6 = 9 // ok. 3 + 6,1 = 6,4 // ? Hab hier VStudio C# 2010 Express.
Heimtücke. Hab's rausgefunden, es liegt an den Ländereinstellungen. Als Eingabe hab ich nen Dezimalpunkt, erwartet wird aber ein Komma...
Ich tippe mal die Convert.ToDecimal kommt nicht mit Komma klar. Ersetze das Komma mal durch einen Punkt (englische Notation) also: 3 + 6.1
Chhhhulio Amperez schrieb: > Könnte man so n Mist abfangen? > Try + catch oder so? Eventuell mit der zweiparametrigen Variante von ToDeciaml: http://msdn.microsoft.com/en-us/library/9k6z9cdw.aspx Also etwa so:
1 | CultureInfo culture = new CultureInfo("en-US"); |
2 | decimal dec = Convert.ToDecimal(textBox1.Text, culture); |
Oder das Komma durch einen Punkt ersetzen:
1 | decimal dec = Convert.ToDecimal(textBox1.Tag.Replace(',','.')) + Convert.ToDecimal(textBox1.Text.Replace(',','.')); |
Samuel K. schrieb: > Oder das Komma durch einen Punkt ersetzen: > >
1 | decimal dec = Convert.ToDecimal(textBox1.Tag.Replace(',','.')) + |
2 | > Convert.ToDecimal(textBox1.Text.Replace(',','.')); |
Das Thema ist ein konstantes Ärgernis. Den natürlich kannst du nicht verhindern, dass irgendein BWL Schleuberger wahlweise Tausenderpunkte bzw. Tausenderkomma eingibt.
(ich kenn das eigentlich nur so, dass die DEFAULT funktion die aus text
eine zahl macht, die Ländereinstellung berücksichtigt, also wenn
weindows auf DE eingestellt ist mit "," funktionierten müsste, und bei
ENU mit ".")
aber egal..
>Schleuberger wahlweise Tausenderpunkte bzw. Tausenderkomma eingibt.
deshalb macht man ja auch editfelder mit "Maske" die nur das eingeben
von z.b. Datum oder zahlen im richtigen Format zulassen...
wenn man Formeln eingeben kann, wirds schwieriger,
bekommt man halt eine Fehlermeldung ala Excel..
ist ja auch kein problem
Karl Heinz Buchegger schrieb: > Den natürlich kannst du nicht verhindern, dass irgendein BWL > Schleuberger wahlweise Tausenderpunkte bzw. Tausenderkomma eingibt. Lässt sich abfragen:
1 | decimal conv(string s) |
2 | {
|
3 | if(s.IndexOf('.') < s.IndexOf(',')) //Punkt vor Komma -> Punkt ^= Tausender |
4 | s = s.Replace(".","").Replace(',', '.'); //Tausender entfernen, Komma durch Punkt ersetzen |
5 | s = s.Replace(",",""); //Tausender entfernen |
6 | return Convert.ToDecimal(s); |
7 | }
|
Ich finde eine gute Software sollte alle Möglichkeiten behandlen, sodass der Anwender nie plötzlich eine Fehlermeldung erhält - nur ist das nicht immer leicht zu bewerkstelligen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.