Zu deinem Problem.
Du möchtest Kommazahlen über 10 Buttons eingeben.
Gleichzeitig mit dem Drücken einer Taste baust du
auch die Zahl zusammen.
Wie machst du das?
Nun, du benutzt den Zusammenhang, dass um an eine Zahl x eine
neue Dezimalstelle y anzuhängen, du das ganze als 10 * x + y
rechnen kannst.
Bsp. aus 12 und der nächsten Ziffer 3 wird so
12 * 10 -> 120
und dazu noch 3 dazu 120 + 3 -> 123
Aber: geht das auch bei Nachkommastellen?
Nein. Das geht so nicht! Aber wie geht das bei Nachkommastellen?
um an die Zahl 12 eine 3 als erste Nachkommastelle anzuhängen,
musst du rechnen:
12 + 0.3
du musst also aus den 3 zuerst mal 0.3 machen. Warum 0.3?
Weil wir über die erste Nachkommastelle reden.
12 + 0.3 -> 12.3
Was ist, wenn da jetzt noch eine Stelle drankommt, sagen wir 5
12.3 + 0.05 -> 12.35
Aus den 5 mussten also 0.05 werden.
Da ist aber ein Muster drinnen.
Für die erste Nachkommastelle musste die einzelne Ziffer durch
10 dividiert werden, für die nächste durch 100, für die nächste
werden es dann 1000 sein, etc.
D.h. du musst bei der Behandlung der Ziffern-Tastendrücke unter-
scheiden, ob diese Ziffer in den Vorkomma-Anteil wandert oder
ob es sich um eine Nachkommastelle handelt. Woher weist du,
ob du vor dem Komma bist oder dahinter?
Wenn die Eingabe einer Zahl beginnt, dann gibt der Benutzer
immer Vorkommastellen ein. Durch Drücken der Punkt-Taste teilt
der Benutzer dem Programm mit: Vorkommaanteil beendet, ab hier
beginnt der Nachkommaanteil.
Die Punkt Taste ist also nichts weiter als ein Umschalter (den du
dir als bool Variable in deinem Dialog anlegst), der entscheidet
was mit einem Ziffern-Tastendruck zu geschehen hat:
Vorkomma: Neue Zahl = Alte Zahl * 10 + Ziffer
Nochkomma: Neue Zahl = Alte Zahl + ( Ziffer / StellenFaktor )
StellenFaktor = 10 * StellenFaktor
Punkt: Umschalten Vorkomma -> Nachkomma
StellenFaktor = 10
Übrigens denke ich nicht, dass es so elegant ist, die Zahl direkt
bei der Eingabe zusammenzubauen.
Ich würde das eher so machen, das bei den Ziffern und Punkt Tasten
einfach nur ein Zeichen an einen String angehängt wird. Wenn dann
die tatsächliche Zahl gebraucht wird, dann hol ich mir diesen Text
von der Anzeige und wandle ihn erst dann in einem Rutsch in eine
double Zahl um. Das vermeidet dann auch eine Menge Probleme, die
zwischendurch durch Rundunsfehler bei der Zahl-Berechnung und
zwischenzeitlichen Anzeige auftreten.