naderk: Plus-Rechnung

Hallo Leute,
ich bin gerade dabei, mich in Informatik wieder zu beschäftigen, da ich es seit Jahren nicht tat. Genauer gesagt, arbeite ich an einen kleinen Plus-Rechner..

Wenn ich per Prompt die Variabel x1 und x2 bekomme, und diese dann per Alert ausgeben möchte, kommt bei einer Plusrechnung zwei aneinandergereihte Zahlen.

Das heißt: x1=2
           x2=3

dann ist das Ergebnis nicht 5, sondern 23??

Hier ist der Code, falls er nützlich sein sollte..""

<html><head><title>Test</title>
<script type="text/javascript">
x1 = prompt("Geben Sie x1 an", "");
x2 = prompt("Geben Sie x2 an", "");
erg=x1+x2
{
alert (erg);
}
</script>
</head><body>
</body></html>

Danke im Vorraus..

  1. Hallo naderk,

    dann ist das Ergebnis nicht 5, sondern 23??

    Ja, weil lediglich die Ziffern aneinander gesetzt wurden. Wenn Du rechnen willst, musst Du die Eingaben in eine Zahl wandeln. Das geht z.B. durch das Multiplizieren mit 1 oder durch http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_int@title=parseInt bzw. http://de.selfhtml.org/javascript/objekte/unabhaengig.htm#parse_float@title=parseFloat.

    Mit freundlichem Gruß
    Micha

  2. Om nah hoo pez nyeetz, naderk!

    <html><head><title>Test</title> <script type="text/javascript"> x1 = prompt("Geben Sie x1 an", ""); x2 = prompt("Geben Sie x2 an", ""); erg=x1+x2

    Diese Eingaben werden als Zeichenketten angesehen. So wäre zum Beispiel "Hallo " + "Welt!" "Hallo Welt!" und "2" + "3" eben "23". Das Pluszeichen steht einmal als der normale Additionsoperator zur Verfügung oder aber auch als Konkatenator für Zeichenketten. Da in Javascript die Variablentypen nicht festgelegt werden müssen (wie z.B. in Java) und sich auch während des Programmablaufs ändern können, kannst du

    x1 = 1 * x1;

    verwenden, um aus der eingebenen Zeichenkette eine Zahl zu machen. Javascript "merkt", dass der Operator "*" nicht auf Zeichenketten angewendet werden kann und führt die Umwandlung des Variablentyps durch. Bei "Hallo" sollte es allerdings eine Fehlermeldung geben.

    also für dich könnte das heißen

    erg = 1 * x1 + 1 * x2; oder erg = parseInt(x1) + parseInt(x2); oder erg = parseFloat(x1) + parseFloat(x2);

    in den beiden letzten Fällen bekommst du als Ergebnis NaN (keine Zahl), sodass du darauf reagieren kannst [[ref:self812;javascript/objekte/unabhaengig.htm@title=parse... auf selfhtml]]

    Danke im Vorraus..

    gerrn

    Matthias

    --
    1/z ist kein Blatt Papier. http://www.billiger-im-urlaub.de/kreis_sw.gif
    1. Yerf!

      erg = parseInt(x1) + parseInt(x2);

      Bei parseInt könnte man noch darauf hinweisen, dass man den 2. Parameter mit übergeben sollte, wenn man keine unliebsamen Überraschungen erleben will, falls der User mal Zahlen mit führender 0 eingibt (z.B. 010).

      erg = parseInt(x1, 10) + parseInt(x2, 10);

      (in der Annahme das wirklich das Dezimalsystem gewünscht ist ;-)

      Gruß,

      Harlequin

      --
      RIP --- XHTML 2
      nur die Besten sterben jung
      1. Om nah hoo pez nyeetz, Harlequin!

        Bei parseInt könnte man noch darauf hinweisen, dass man den 2. Parameter mit übergeben sollte, wenn man keine unliebsamen Überraschungen erleben will, falls der User mal Zahlen mit führender 0 eingibt (z.B. 010).

        Ja, Oktalzahlen kann man bestimmt bei selfhtml nachlesen. Vor allen Dingen könnte man schreiben, dass man NaN nur im Fehlerfall erhält ;-)

        Matthias

        --
        1/z ist kein Blatt Papier. http://www.billiger-im-urlaub.de/kreis_sw.gif
    2. [latex]Mae  govannen![/latex]

      also für dich könnte das heißen

      erg = 1 * x1 + 1 * x2; oder

      Ich finde das (immer wieder) schrecklich, weil es für den Fremdleser die Intention verschleiert. Wer nicht weiß, daß JS Werte aus Eingabefeldern immer als Zeichenkette typisiert, wird sich daher erfolglos fragen, was das soll. Gleiches gilt für bspw. +x1

      Was spricht gegen erg = Number(x1) + Number(x2); (hier unter der Voraussetzung, daß wirklich nur Zahlen eigegeben werden, ansonsten muß man -wie auch in den anderen Fällen mit parseXXXX- das Ergebnis der Wandlung getrennt prüfen und behandeln.

      Stur lächeln und winken, Männer!
      Kai

      --
      Dank Hixies Idiotenbande geschieht grade eben wieder ein Umdenken
      in Richtung "Mess up the Web".(suit)
      SelfHTML-Forum-Stylesheet