molily: Problem bei Setzen und Ändern des Focus

Beitrag lesen

Aus Formularfeldern liest du immer Strings aus - bevor du mit diesen rechnen kannst, musst du sie in Zahlen umwandeln; Stichworte parseInt/parseFloat.

Das stimmt zwar als Faustregel und dient der Fehlervermeidung. Aber es hängt ganz von den verwendeten Operatoren und den Operandentypen ab, ob man explizit Typen umwandeln *muss*. In den Berechnungen, die Bart durchführt, werden die Strings automatisch zu Number-Werten umgewandelt. Das sind str >= 0 und str1 - str2. In diesen Fällen ist eine explizite Typumwandlung nicht nötig, da das Ergebnis eindeutig und zuverlässig ist.

Der genannten +-Operator ist da tatsächlich heikler, aber das Ergebnis auch vorhersehbar: Ist einer der Operanden ein String, castet er den anderen nach String und hängt sie aneinander, andernfalls castet er beide nach Number und addiert sie. formularwert + number ergibt also immer einen String, hier ist eine explizite Typumwandlung nötig, wenn man eine Addition will.

Und eine 0 davor zu hängen, kann auch schnell problematisch werden - Stichwort Oktalsystem.

Dieses Problem besteht nur bei parseInt ohne ausdrücklichen zweiten Parameter. Nicht bei der automatischen Konvertierung mittels ToNumber - welche man mit Number() explizit durchführen kann. Diese erkennt Dezimal- und Hexadezimalwerte (letztere mit 0x-Prefix). Auch nicht bei parseFloat, welche immer zur Basis 10 arbeitet.

parseFloat ist die toleranteste und hinsichtlich des Zahlensystems sicherste Variante, wenn man nicht ausdrücklich Ganzzahlen braucht. Sie geht allerdings von ».« als Dezimaltrenner aus, d.h. »,« wird als Zahlenende angesehen.

Mathias