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
?
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
?
È 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.
il problema è se ho qualcosa di simile a questo '2 * 2.500,00 = 5' e dovrebbe essere' 5.000,00' –
Vedi modifica: Propongo una soluzione per questo. –
Sembra che si ottengano stringhe dalla funzione val()
.
È possibile utilizzare Number
, o parseInt
, o parseFloat
per lanciare tipi
$(total).val(Number(a) * Number(b));
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.
Javascript ha solo numeri. No int e float. –