Labtec: Anfängerfrage Addition!

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

  1. 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

    --
    Losung und Lehrtext für Freitag, 5. März 2004
    Auf ihm wird ruhen der Geist des Herrn, der Geist der Weisheit und des Verstandes, der Geist des Rates und der Stärke, der Geist der Erkenntnis und der Furcht des Herrn. (Jesaja 11,2)
    Jesus ließ sich taufen von Johannes im Jordan. Und alsbald, als er aus dem Wasser stieg, sah er, dass sich der Himmel auftat und der Geist wie eine Taube herabkam auf ihn. Und da geschah eine Stimme vom Himmel: Du bist mein lieber Sohn, an dir habe ich Wohlgefallen. (Markus 1,9-11)
    (http://www.losungen.de/heute.php3)
  2. 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

    --
    Good results come from experience; and experience comes from bad results.
    1. 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

      --
      "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning."
      (Rich Cook)
      1. Hallo nochmal,

        Was habt ihr eigentlich gegen parseNum()?

        da hab ich was verwechselt. Sollte Number() statt parseNum() heissen.

        Grüße
        Andreas

        --
        "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning."
        (Rich Cook)
        1. 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

          --
          Good results come from experience; and experience comes from bad results.
  3. N'Obend

    Andere Lösung wäre noch die Addition als doppelte Subtraktion zu schreiben:

    var gesamt = (zahl1 - (-zahl2));

    Tschö,
    dbenzhuser