Forum Doku Wiki Blog

Forumsarchiv 2002, Oktober
JS rechnet nicht sondern reiht aneinander

archivierte Beiträge lesen

  1. (JAVASCRIPT) JS rechnet nicht sondern reiht aneinander von Martin, 30. 10. 2002, 12:55

JS rechnet nicht sondern reiht aneinander

Der folgende Beitrag wurde am 30. 10. 2002, 12:55 Uhr von Martin veröffentlicht.

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

JS rechnet nicht sondern reiht aneinander

Der folgende Beitrag wurde am 30. 10. 2002, 13:02 Uhr von Cyx23 veröffentlicht.

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

Danke!

Der folgende Beitrag wurde am 30. 10. 2002, 13:08 Uhr von Martin veröffentlicht.

hi Cyx23,

danke für deinen tipp hat funktioniert

Martin

JS rechnet nicht sondern reiht aneinander

Der folgende Beitrag wurde am 30. 10. 2002, 13:06 Uhr von Thomas Meinike veröffentlicht.

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

JS rechnet nicht sondern reiht aneinander

Der folgende Beitrag wurde am 30. 10. 2002, 14:02 Uhr von Hans35 veröffentlicht.

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

JS rechnet nicht sondern reiht aneinander

Der folgende Beitrag wurde am 30. 10. 2002, 15:40 Uhr von Thomas Meinike veröffentlicht.

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

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4