JS rechnet nicht sondern reiht aneinander
Martin
- javascript
0 Cyx230 Thomas Meinike0 Hans35
hallo,
ich hab folgende zeile:
d=eval(d+document.f.elements[z].value);
wenn jetzt z.b. d=2 und document.f.elements[3].value=4 ist dann wird nicht "6" sondern "24" ausgegeben.was mache ich falsch?
martin
Hallo,
d=eval(d+document.f.elements[z].value);
wenn jetzt z.b. d=2 und document.f.elements[3].value=4 ist dann wird nicht "6" sondern "24" ausgegeben.was mache ich falsch?
an eval sollte es nicht liegen, also ist value wohl ein string.
Versuch mal:
d+=document.f.elements[z].value*1;
Grüsse
Cyx23
hi Cyx23,
danke für deinen tipp hat funktioniert
Martin
Hallo,
d=eval(d+document.f.elements[z].value);
wenn jetzt z.b. d=2 und document.f.elements[3].value=4 ist dann wird nicht "6" sondern "24" ausgegeben.was mache ich falsch?
Es werden Zeichenketten addiert, da Formularfelder nicht 4 sondern "4" enthalten!
Wenn d bereits ein numerischer Wert ist sollte
d+=parseInt(document.f.elements[3].value,10);
reichen.
MfG, Thomas
Hallo,
d=eval(d+document.f.elements[z].value);
wenn jetzt z.b. d=2 und document.f.elements[3].value=4 ist dann wird nicht "6" sondern "24" ausgegeben.was mache ich falsch?
Es werden Zeichenketten addiert, da Formularfelder nicht 4 sondern "4" enthalten!
Wenn d bereits ein numerischer Wert ist sollte
d+=parseInt(document.f.elements[3].value,10);
reichen.
W e n n ... ist genau richtig. Aber wenn nicht, wird doch wieder eine Zeichenkette draus!
Wenn nicht ganz sicher ist, dass d bereits eine Zahl enthält, dann muß es richtig heißen:
d=eval(d) + eval(document.f.elements[z].value)
Das ist immer eine Zahl als Additionsergebnis.
parseInt() ist statdessen zu nehmen, wenn d (vorher und nachher) eine Ganze Zahl (Integer) ist bzw. sein soll. (Aber Vorsicht, da wird nicht grundet, sondern die Nachkommastellen werden abgeschnitten.)
Gruß
Hans35
Hallo,
W e n n ... ist genau richtig. Aber wenn nicht, wird doch wieder eine Zeichenkette draus!
Wenn nicht ganz sicher ist, dass d bereits eine Zahl enthält, dann muß es richtig heißen:
d=eval(d) + eval(document.f.elements[z].value)
Das ist immer eine Zahl als Additionsergebnis.
parseInt() ist statdessen zu nehmen, wenn d (vorher und nachher) eine Ganze Zahl (Integer) ist bzw. sein soll. (Aber Vorsicht, da wird nicht grundet, sondern die Nachkommastellen werden abgeschnitten.)
Hier wuerde ich auch eher zu solchen Formulierungen greifen:
d=parseInt(d,10) + parseInt(document.f.elements[z].value,10);
oder
d=parseFloat(d) + parseFloat(document.f.elements[z].value);
Wenn es explizite Typkonvertierungsfunktionen gibt, verwende ich diese und nicht eval(). Letzteres halte ich am ehesten bei der Zusammensetzung von Ausdruecken fuer angebracht, z. B.:
var a,b,c,d,e;
a="Math";
b="pow";
c=2;
d=4;
e=eval(a+"."+b+"("+c+","+d+")");
alert(e); // 16
Ansonsten ist eval() meistens ersetzbar oder ganz entbehrlich.
MfG, Thomas