2012-12-19 12 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 

Non sono sicuro del motivo per cui continuo a ricevere NaN. Ho già provato parseFloat e parseInt ma ancora mostrando NaN quando si moltiplica una variabile (dm) che consiste in variabili (dd-dml). dm è il risultato della sottrazione di dml con dd o 10-30. Per favore condividi le tue soluzioni.Ottenere NaN quando si aggiungono variabili costituite da altre variabili

Sono nuovo qui e ho bisogno di aiuto, per favore non troll :) Sto cercando di aggiungere un calcolatore dei costi al mio sito web.

+1

'typeof NaN' è anche' "numero" ', potresti' alert (dm) 'invece dell'ultimo? – Bergi

+2

Funziona per me: http: // jsfiddle.net/HfCrD/ –

+6

Qual è il ** valore reale ** dell'elemento 'DriverD' –

risposta

0

provare questo

due operandi devono essere convertiti in 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); 

risultato è -.2

+0

Mi dispiace, sto ancora ricevendo NaN quando faccio l'avviso (dm * .10) :(non restituisce NaN quando fa alert ((dd-dml) *. 10) anche se – Jay

+0

ho provato in questo e ho ottenuto l'ans corretto http. : //jsfiddle.net/LChFk/ –

+0

Pls ricarica il tuo browser (ctrl + shft + R) –

1

E sembra che vada bene per me.

Voglio dire un altro possibile problema: non controllate se document.getElementById("DriverD").value è un numero o meno. Se un utente inserisce una stringa o un altro tipo, causerà un problema.

+0

Grazie per la tua risposta rapida. Metterò il gestore degli errori per quello in futuro :) ma per ora sto usando il numero 10 mentre risolvo questo problema. – Jay

+0

Vorrei poterti aiutare. Ma non ho usato javascript. – smttsp

+0

I GOT IT! COME STUPIDO DI ME. SUL MIO SITO WEB ATTUALE DICHIARAVO DM PRIMA DI DD E DML. FUNZIONA SUBITO GRAZIE RAGAZZI! : D – Jay

0

L'unico motivo per cui è possibile ottenere NaN qui è che il valore di dd è NaN. Poiché il valore di dm è definito come dd - dml e il valore di dml è un valore Number, 30.

parseFloat() restituisce sempre un valore Number. L'operatore - converte i suoi operandi in Number solo se necessario. Quindi il valore di dm deve essere per definizione un valore Number.

Tuttavia, NaN è un valore Number (typeof NaN === "number"), ed è "tossico": una volta operando è NaN, il risultato di tutte seguenti operazioni aritmetiche è NaN.

Ciò significa che parseFloat() deve aver restituito NaN, il che significa che l'argomento parseFloat() non poteva essere interpretata come prefisso di una rappresentazione numero decimale.

Un motivo comune è che l'utente ha inserito migliaia di separatori (che non sono supportati) o una virgola decimale mentre è supportato solo un punto decimale.

+0

Il mio male è che ho dichiarato dm prima (var dm = dd - dml) prima di dichiarare dd e dml, quindi è come fare var dm = null - null. Funziona bene ora, ho riorganizzato l'ordine delle mie dichiarazioni :) :) – Jay

+0

In questo caso è equivalente a 'var dm = non definito - non definito 'dove il lato destro è equivalente a' Numero (indefinito) - Numero (non definito) ',' NaN - NaN' e infine 'NaN'. L'istanziazione variabile avviene prima dell'inizializzazione della variabile. Le variabili sono istanziate con il valore 'undefined' del tipo' Undefined', non il valore 'null' del tipo di oggetto' Null'. – PointedEars

0

Provaquesto

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

Sono un novizio, ma penso che sia il tipo di errore, soluzione:

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

parseInt (valore, 10) - lo sai perché hai usato parse float, ma due pipe e zero potrebbero impedirti di NaN visto che JavaSrcipt potrebbe trattare 0 come stringa.

Problemi correlati