Forum: PC-Programmierung Anfängerproblem: Zahlenconversion


von Chhhhulio Amperez (Gast)


Lesenswert?

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.

von Chhhhulio Amperez (Gast)


Lesenswert?

Heimtücke. Hab's rausgefunden, es liegt an den Ländereinstellungen.

Als Eingabe hab ich nen Dezimalpunkt, erwartet wird aber ein Komma...

von Thorsten (Gast)


Lesenswert?

Ich tippe mal die Convert.ToDecimal kommt nicht mit Komma klar. Ersetze 
das Komma mal durch einen Punkt (englische Notation)

also:
3 + 6.1

von Chhhhulio Amperez (Gast)


Lesenswert?

Yep, das war's.

von Chhhhulio Amperez (Gast)


Lesenswert?

Könnte man so n Mist abfangen?
Try + catch oder so?

von ... (Gast)


Lesenswert?

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);

von Sam .. (sam1994)


Lesenswert?

Oder das Komma durch einen Punkt ersetzen:
1
decimal dec = Convert.ToDecimal(textBox1.Tag.Replace(',','.')) + Convert.ToDecimal(textBox1.Text.Replace(',','.'));

von Karl H. (kbuchegg)


Lesenswert?

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.

von Robert L. (lrlr)


Lesenswert?

(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

von Sam .. (sam1994)


Lesenswert?

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
Noch kein Account? Hier anmelden.