Kommastellen "herausfiltern"

Es gibt wohl viele richtige Lösungsmöglichkeiten, darüber brauchen wir jetzt nicht reden. Aber ich persönlich versuche stets ein Mittelmaß der nachfolgenden Punkte zu finden.

- Richtigkeit des Codes
- Lesbarkeit des Codes
- Performance des Codes

Ich meine, wenn ich nicht wüsste was der Code im vorherigen Post machen soll, dann hätt ich da schon so meine Probleme das auf Anhieb zu erkennen. Bei genauerem Hinschauen dann zwar schon, aber das senkt eben die Wartbarkeit des Codes. Wenn ausreichend Kommentare da sind, dann ist´s wiederum okay. :)
 
Ne Frage zu den Kommata und konvertieren...

Da ich noch recht ungelernt in Sachen C# bin,
programmiere ich derzeit einen kleinen Desktop-Taschenrechner.

Ich habe 2 Textfelder (für erste und zweite Zahl) nach String geparst,
da ich das immer in Java so gemacht habe *g*

Als nächstes hab ich eine Abfangmethode eingefügt,
die eine Fehlermeldung ausgibt, sobald die Konvertierung der String-geparsten Inputs ins Datenformat Double fehlschlägt.

Mein Problem ist nun, dass Kommate sowei Punkte ( , u. . ) ebenso abgefangen werden und die Fehlermeldung auslösen.
Wie bekomm ich denn dann bitte Kommastellen in meinen Rechner,
ohne eine Exception auszulösen?

Gruss
Ixu
 
Hallo!

Fang doch bereits bei der Eingabe in das Textfeld die ungewünschten Zeichen ab. Lass einfach nur nummerische Werte sowie das Komma zu. Dazu musst Du folgenden Code dem KeyPress-Ereignis der Textbox zuweisen:
Code:
private void TxtNumeric_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
{
   if (!Char.IsNumber(e.KeyChar) && e.KeyChar != ',')
   {
      e.Handled = true;
   }
}
Das ist eine Möglichkeit unter vielen, aber es funktioniert. :-)
 
Danke für den Code erstmal,
jedoch hat sich mein Problem dadurch nicht gelöst.

Meine Zahl (ob mit Komma oder Punkt für Dez-Bereich) lässt sich einfach nicht von String in Double umwandeln, ohne eine Fehlermeldung auszuspucken, d.h.,
mein Programm mag nicht mit anderen Komponenten ausser Zahlen funktionieren...

Aber normalerweise ist das Komma doch im Double enthalten oder irre ich mich?

Ich würde ja gerne sofort auf Double umsteigen, aber
a) bin ich es von Java gewohnt die Textfelder mit String auszulesen,
um sie dann in andere Datentypen zu konvertieren/parsen.

b) weiss ich nicht wie ich ein Textfeld auslesen soll, dass mit Doublewerten arbeitet,
da es bei String ja einfach über textBox.Text funktioniert.
Wie geht das bei Double?

c) weil ich noch Jüngling bin *g*
 
Zuletzt bearbeitet:
Hmm ... verwendest Du für die Konvertierung schon die Convert-Klasse? Das sollte eigentlich keinerlei Probleme beinhalten.

Versuchs mal hiermit:
Code:
try
{
   double dZahl = Convert.ToDouble(TxtNumeric.Text);
}
catch
{
    // Exception Handling
}
Habs gerade ausprobiert, funktioniert einwandfrei.


zu a.)
Genauso funktioniert das auch in C#.NET.

zu b.)
Das geht nicht mit Double bei der Standard-Textbox. Da müsstest Du Dir schon eine eigene Textbox programmieren. Machs lieber über Strings und konvertiere danach in den richtigen Datentyp.

zu c.)
Waren wir alle mal. :)
 
dZahl %=1;


wenn z.B.:

double dZahl=4,321;
dZahl%=1;

//dZahl=0,321

nun kannste das mit 1000 mulltiplizieren, du kannst auch vorher festlegen wie genau die Kommastelle maximal sein soll, und das anpassen.
 
zu deinem String-to-double-Problem:

du musst das ja nicht mehr in double konvertieren, kannst ja auch in Int32 konvertieren. und das müsste problemlos gehen:

int zahl=Convert.ToInt32(textBox.Text);
 
@ woni:
Na ja, warum einfach wenns kompliziert auch geht. *g* ;)

Ich versteh nur irgendwie nicht was dem armen Jungen das bringen soll ...
 
Ich glaube meine Frage hat sich erledigt da ich nen dümmlichen Fehler gemacht habe ...

Ich hab zwar das Ergebnis gedoubled, aber die Textfelder mit Int16 konvertiert *kopfklatsch*

Dass mir das jetzt erst auffällt ...
Aber danke an Euch, hab ich wieder bissel mehr in meinem Wissensschatz *g*
 
Zurück