2012-12-19 4 views
5
var dml = 30 
var dd = parseFloat(document.getElementById("DriverD").value)  <----- Only numbers like 10 
var dm = dd-dml 

alert((dd - dml) * 0.75) <----- This works 
alert(dm * 0.75)   <----- This returns NaN 
alert(typeof(dm))  <----- This show that dm is a Number 

Ich bin mir nicht sicher, warum ich immer NaN bekomme. Ich habe bereits parseFloat und parseInt ausprobiert, zeige aber immer noch NaN, wenn man eine Variable (dm) multipliziert, die aus Variablen (dd-dml) besteht. dm ist das Ergebnis der Subtraktion von dml mit dd oder 10-30. Bitte teilen Sie Ihre Lösungen.Erhalten von NaN beim Hinzufügen von Variablen, die aus anderen Variablen bestehen

Ich bin neu hier und ich brauche Hilfe, bitte troll nicht :) Ich versuche, einen Kostenrechner zu meiner Website hinzuzufügen.

+1

'typeof NaN' ist auch' 'number'', könnten Sie 'alarmieren (dm)' anstelle der letzten? – Bergi

+2

Funktioniert für mich: http: // jsfiddle.net/HfCrD/ –

+6

Was ist der ** echte ** Wert von 'DriverD' Element –

Antwort

0

Versuchen Sie, diese

zwei Operanden zu parseFloat

<input type="text:" value="10" id="DriverD" /> 

var dml = parseFloat(30); 
var dd = parseFloat(document.getElementById("DriverD").value); 
var dm = dd-dml; 
alert(dm * .10); 

Ergebnis ± 2

ist
+0

Sorry, immer noch NaN, wenn Alert (dm * .10) :(es NaN nicht zurückgibt, wenn Alert ((dd-dml) *. 10) obwohl – Jay

+0

Ich versuchte es in diesem und bekam die richtige ans. Http : //jsfiddle.net/LChFk/ –

+0

Bitte laden sie ihren browser neu (ctrl + shft + R) –

1

Es scheint gut zu mir konvertieren werden müssen.

Ich möchte ein anderes mögliches Problem melden: Sie überprüfen nicht, ob document.getElementById("DriverD").value eine Nummer ist oder nicht. Wenn ein Benutzer eine Zeichenfolge oder einen anderen Typ eingibt, verursacht dies ein Problem.

+0

Vielen Dank für Ihre schnelle Antwort, ich werde in Zukunft Fehler-Handler dafür setzen :) aber für jetzt benutze ich die Nummer 10 während der Fehlersuche in dieser Angelegenheit. – Jay

+0

Ich wünschte, ich könnte helfen. Aber habe Javascript nicht benutzt. – smttsp

+0

Ich habe es! WIE DUMM VON MIR. AUF MEINER AKTUELLEN WEBSEITE ERKLARTE ICH DM FIRST VOR DD UND DML. FUNKTIONIERT JETZT DANK GUYS! : D – Jay

0

Der einzige Grund, warum Sie NaN hier erhalten konnten, ist, dass der Wert ddNaN ist. Weil der Wert dm als dd - dml definiert ist und der Wert dml ein Number Wert ist, 30.

parseFloat() gibt immer einen Number Wert zurück. Der Operator - konvertiert seine Operanden nur bei Bedarf in Number. Daher muss der Wert dm per Definition ein Number Wert sein.

jedoch NaN ist ein Number Wert (typeof NaN === "number"), und es ist „giftig“: einmal ein Operand NaN ist, das Ergebnis aller folgenden arithmetischen Operationen ist NaN.

Das bedeutet, dass parseFloat()NaN zurückgegeben haben muss, was bedeutet, dass das Argument zu parseFloat() nicht als das Präfix einer Dezimalzahldarstellung interpretiert werden konnte.

Ein häufiger Grund dafür ist, dass der Benutzer Tausendertrennzeichen (die nicht unterstützt werden) oder ein Dezimalkomma eingegeben hat, während nur ein Dezimalpunkt unterstützt wird.

+0

Mein Fehler ist, dass ich dm zuerst deklarierte (var dm = dd - dml), ​​bevor ich dd und dml deklariere, also ist es wie var dm = null - null. Es funktioniert jetzt gut, ich ordnete die Reihenfolge meiner Deklarationen um :) – Jay

+0

In diesem Fall ist es äquivalent zu 'var dm = undefined - undefined' wo die rechte Seite ist äquivalent zu' Nummer (undefiniert) - Nummer (undefiniert) ',' NaN - NaN' und schließlich 'NaN'. Die variable Instanziierung erfolgt vor der Variableninitialisierung. Variablen werden mit dem "undefinierten" Wert des Typs "Nicht definiert" instanziiert, nicht mit dem "Null" -Wert des Objekttyps "Null". – PointedEars

0

Versuchendieses

var dml = 30; 
    var dd = parseFloat(document.getElementById("DriverD").value) ; <----- Only numbers like 10 
    var dm=0; 
    dm = dd-dml; 

    alert((dd - dml) * 0.75); <----- This works 
    alert(dm * 0.75);   <----- This returns NaN 
    alert(typeof(dm));  <----- This show that dm is a Number 
0

ich ein Neuling bin, aber ich denke, es ist die Art Fehler ist, Lösung:

var someV = parseInt(document.getElementById("some-v-id").value, 10) || 0, 

parseInt (Wert 10) - Sie wissen, weil Sie Parse-Float verwendet haben, aber zwei Pipes und Null könnten Sie von NaN abhalten, da JavaSricpt 0 als String behandelt.

Verwandte Themen