andreas: 4-Grundrechnungen

<HTML>
<HEAD>
<TITLE>test, Berechnung </TITLE>

<script language="JavaScript">
  <!--

function rechnen()
{

//addieren: funktioniert nicht richtig!!!

add = (document.Test2.z3.value + document.Test2.z4.value);
document.Test2.Aus.value = add;

subt = (document.Test3.z5.value - document.Test3.z6.value);
document.Test3.Aus.value = subt;

multi  = (document.Test4.z7.value * document.Test4.z8.value);
document.Test4.Aus.value = multi;

divi  = (document.Test5.z9.value / document.Test5.z10.value);
document.Test5.Aus.value = divi;

}
  // -->
  </script>

</HEAD>
<BODY>
<table width=500 border=0>

<tr><td height=20></td></tr>

<tr>
<td valign=top>
<CENTER>

<form name="Test3">
<font  face=arial size=2><B>Subtrahieren:</B></font><BR>
  <input name="z5" size=5 maxlength=10> <input type=button value=" - "> <input name="z6" size=5 maxlength=10>
  <input type=button value=" = " onClick="rechnen();"> <input name="Aus" size=5 maxlength=10>
<BR><BR>
  </form>

<form name="Test4">
<font  face=arial size=2><B>Multizipieren:</B></font><BR>
  <input name="z7" size=5 maxlength=10> <input type=button value=" x "> <input name="z8" size=5 maxlength=10>
  <input type=button value=" = " onClick="rechnen();"> <input name="Aus" size=5 maxlength=10>
<BR><BR>
  </form>

<form name="Test5">
<font  face=arial size=2><B>Dividieren:</B></font><BR>
  <input name="z9" size=5 maxlength=10> <input type=button value=" : "> <input name="z10" size=5 maxlength=10>
  <input type=button value=" = " onClick="rechnen();"> <input name="Aus" size=5 maxlength=10>
<BR><BR>
  </form>

<form name="Test2">
<font  face=arial size=2><B>Addieren:</B></font><BR>
  <input name="z3" size=5 maxlength=10> <input type=button value=" + "> <input name="z4" size=5 maxlength=10>
  <input type=button value=" = " onClick="rechnen();"> <input name="Aus" size=5 maxlength=10>
<BR><BR>
</form>

</CENTER>
</td>
</tr>

</table>
</BODY>
</HTML>

wo habe ich den Fehler gemacht??!
;-?
ak

  1. Hallo Andreas,

    ...
    function rechnen()
    {
     add = (document.Test2.z3.value +
             document.Test2.z4.value);
      document.Test2.Aus.value = add;
      ...
    }
    ...

    Du benutzt in der Funktion das Plus-Zeichen für die
    Rechenoperation. Da in JS aber standardmaessig
    Zeichenketten der normale Dateityp sind und
    hierfuer das Plus-Zeichen eine Aneinanderkettung
    der Strings bewirkt rechnet Deine Rechenmaschine nicht
    korrekt.

    Du koenntest die obige Rechenzeile z.B. gegen

    add = eval(document.Test2.z3.value + "+" + document.Test2.z4.value);

    tauschen. Dann wird der String (1.Zahl, Plus-Zeichen,
    2.Zahl) als rechenaufgabe interpretiert (eval).

    Ein Tip noch, wenn Du schon nur eine Funktion für alle
    Rechenoperationen (alle '='-Buttons) machst, dann
    solltest Du auch die Eingabe eines Divisor erzwingen.
    Wenn das Feld Leer bleibt und jemand auf das '=' drueckt
    dann erscheint naemlich eine unschoene Fehlerausgabe
    NaN (Not a Number) im Ergebnis der Division.

    Ich hoffe, ich konnte Dir helfen

    Hartmut Schoepke

    1. Hallo,

      add = (document.Test2.z3.value +
               document.Test2.z4.value);
        document.Test2.Aus.value = add;

      Du benutzt in der Funktion das Plus-Zeichen für die
      Rechenoperation. Da in JS aber standardmaessig
      Zeichenketten der normale Dateityp sind

      Fast :-)
      Die Zeichenketten sind zwar die Ursache, aber die Erklaerung stimmt nicht.
      Ich zitiere mal einfach wieder, Ihr wisst schon, Doku:
      "JavaScript is a loosely typed language. That means you do not have to specify the data type of a variable when you declare it, and data types are converted automatically as needed during script execution."

      Aber hier sind es tatsaechlich Strings, weil naemlich "value" String ist:
      "value
      Property. A string that is related to the VALUE attribute of its object."

      Christine

      BTW: Dokus sind gar nicht so trocken, wie sie auf den ersten Blick aussehen :-)
      Wer sich davon ueberzeugen will, auf meinen Seiten ist 'ne ganze Reihe aufgelistet.

      1. Hi,

        Du benutzt in der Funktion das Plus-Zeichen für die
        Rechenoperation. Da in JS aber standardmaessig
        Zeichenketten der normale Dateityp sind

        Fast :-)
        Die Zeichenketten sind zwar die Ursache, aber die
        Erklaerung stimmt nicht.
        ...
        Aber hier sind es tatsaechlich Strings, weil naemlich
        "value" String ist: "value Property. A string that is
        related to the VALUE attribute of its object."

        Danke Christine,
        vieleicht liegt mein Irtum auch darin, dass ich dieses
        Problem bisher immer nur im Zusammenhang mit Eingabe-
        Feldern hatte und ich dort natuerlich dem 'value'
        gearbeitet hatte.

        Stimmt schon in der 'loosely typed language' ist man
        so manches mal unsicher als welcher Typ ein Ergebnis
        nun wieder interpretiert wird.

        BTW: Dokus sind gar nicht so trocken, ...
        auf meinen Seiten ist 'ne ganze Reihe aufgelistet.

        Werd ich mir demnaechst mal ansehen. Danke