Anfängerfrage Addition!
Labtec
- javascript
Hi!
Hab eine kleine Frage! Ich möchte einfach 2 Zahlen, die ich aus einem Formular auslesen, addieren:
var zahl1 = document.Formular.test1.value;
var zahl2 = document.Formular.test2.value;
var gesamt = (zahl1 + zahl2);
Das Problem: Er addiert die Zahlen nicht sondern setzt sie zusammen! Also wenn zahl1 "100" ist und Zahl2 "200" gibt er "100200" aus. Wenn ich aber Zahl1 und Zahl2 jeweils zusätzlich noch mit 1 multipliziere funktioniert es einwandfrei...
Könnte mir jemand erklären warum das so ist?
Danke im Voraus!!
Lg Labtec
Hallo Labtec!
var zahl1 = document.Formular.test1.value;
var zahl2 = document.Formular.test2.value;
var gesamt = (zahl1 + zahl2);
Das Problem: Er addiert die Zahlen nicht sondern setzt sie zusammen! Also wenn zahl1 "100" ist und Zahl2 "200" gibt er "100200" aus. Wenn ich aber Zahl1 und Zahl2 jeweils zusätzlich noch mit 1 multipliziere funktioniert es einwandfrei...
Könnte mir jemand erklären warum das so ist?
Die beiden Werte aus den Formularfeldern faßt JS wohl als Strings (Zeichenketten) auf, und da man mit + auch Strings verketten kann, macht JS standardmäßig das.
Wenn du aber den Wert aus dem Feld zuerst *1 nimmst, kann sich JS wohl denken, daß es jetzt mit einer Zahl zu tun hat, und nimmt deswegen dann + als Addition für Zahlenwerte (Lesetip: http://selfhtml.teamone.de/javascript/sprache/operatoren.htm#berechnung).
MfG
Götz
var zahl1 = document.Formular.test1.value;
var zahl2 = document.Formular.test2.value;
var gesamt = (zahl1 + zahl2);Das Problem: Er addiert die Zahlen nicht sondern setzt sie zusammen! Also wenn zahl1 "100" ist und Zahl2 "200" gibt er "100200" aus. Wenn ich aber Zahl1 und Zahl2 jeweils zusätzlich noch mit 1 multipliziere funktioniert es einwandfrei...
Könnte mir jemand erklären warum das so ist?
Labtec,
Der Wert eines Formularfeldes ist nie eine Zahl, sondern immer ein String. Deshalb keine Addition, sondern Konkatenation (Aneineinanderreihung).
Wenn du mit 1 multiplizierst, führt der JavaScript-Interpreter eine Typumwandlung durch. Sauberer wäre IMHO eine Lösung mit eval().
Gunnar
hi
Sauberer wäre IMHO eine Lösung mit eval().
dabei ist eval doch evil ;)
Part 1:
http://blogs.gotdotnet.com/ericli/PermaLink.aspx/5f27ae83-ff82-4fea-97db-b6fef3922c3b
Part 2:
http://blogs.msdn.com/ericlippert/archive/2003/11/04/53335.aspx
Part 3:
http://blogs.msdn.com/ericlippert/archive/2004/01/26/63087.aspx
so long
ole
(8-)>
Hallo Gunnar (und Götz),
Wenn du mit 1 multiplizierst, führt der JavaScript-Interpreter eine Typumwandlung durch. Sauberer wäre IMHO eine Lösung mit eval().
Was habt ihr eigentlich gegen parseNum()?
Grüße
Andreas
Hallo nochmal,
Was habt ihr eigentlich gegen parseNum()?
da hab ich was verwechselt. Sollte Number() statt parseNum() heissen.
Grüße
Andreas
Was habt ihr eigentlich gegen parseNum()?
da hab ich was verwechselt. Sollte Number() statt parseNum() heissen.
Andreas,
Oder auch parseFloat() bzw. parseInt()
Nichts dagegen,
Gunnar
N'Obend
Andere Lösung wäre noch die Addition als doppelte Subtraktion zu schreiben:
var gesamt = (zahl1 - (-zahl2));
Tschö,
dbenzhuser