2012-12-05 22 views
5

Sto provando questo codice, ma io sono sempre NaNNaN in moltiplicazione

a = unidade.val(); 
b = unitario.val(); 
//alert(a);5 
//alert(b);50,00 
$(total).val(a * b); //NaN 

Perché? perché è un int*float?

+1

Javascript ha solo numeri. No int e float. –

risposta

12

È necessario analizzare le stringhe prima di moltiplicare come val restituisce sempre una stringa e "50,00" non può essere convertito automaticamente in un numero.

parseFloat("50,1") ti dà 50. Se la virgola qui è il separatore decimale, devi sostituirlo con un punto.

Quindi probabilmente è necessario

a = parseFloat(unidade.val().replace(",", "."); 
b = parseFloat(unitario.val().replace(",", "."); 

EDIT:

se si desidera consentire i numeri formattati come 2.500,00, allora vi propongo questo codice:

function vf(str) { 
    return parseFloat(str.replace(".", "").replace(",", ".")); 
} 
a = vf(unidade.val()); 
b = vf(unitario.val()); 

Ma è dangereous se hai utenti che preferiscono (o si aspettano) la notazione americana. Probabilmente mi attenersi alla notazione americana e mostrare un errore se il campo contiene una virgola.

Si noti che HTML5 propone <input type=number> che obbliga l'utente a digitare il numero e consente di ottenere direttamente i numeri. Vedi reference.

+0

il problema è se ho qualcosa di simile a questo '2 * 2.500,00 = 5' e dovrebbe essere' 5.000,00' –

+0

Vedi modifica: Propongo una soluzione per questo. –

2

Sembra che si ottengano stringhe dalla funzione val().

È possibile utilizzare Number, o parseInt, o parseFloat per lanciare tipi

$(total).val(Number(a) * Number(b)); 
1

Bisogna analizzare le stringhe prima si moltiplica!

Nota: Se gli operandi sono numeri, moltiplicare aritmetica regolare viene eseguita, il che significa che due positivi o negativi due uguali positivo, mentre operandi con segni diversi producono un negativo. Se il risultato è troppo alto o troppo basso, il risultato è Infinity o -Infinity.

Se uno degli operandi è NaN, il risultato è NaN.

Se Infinity viene moltiplicato per 0, il risultato è NaN.

Se Infinity viene moltiplicato per qualsiasi numero diverso da 0, il risultato è Infinity o -Infinity, a seconda del segno del secondo operando.

Se Infinità viene moltiplicato per Infinito, il risultato è Infinito.