Plus-Rechnung
naderk
- javascript
1 Micha0 Matthias Apsel
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..
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
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
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
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
[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