2012-12-05 10 views
5

ich diesen Code bin versucht, aber ich bin immer NaNNaN in Multiplikation

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

Warum? weil ist ein int*float?

+1

Javascript hat nur Zahlen. Nein, int und float. –

Antwort

12

Sie müssen die Strings vor der Multiplikation analysieren, da val immer einen String zurückgibt und "50,00" nicht automatisch in eine Zahl konvertiert werden kann.

parseFloat("50,1") gibt Ihnen 50. Wenn das Komma hier das Dezimaltrennzeichen ist, müssen Sie es durch einen Punkt ersetzen.

So müssen Sie wahrscheinlich

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

EDIT:

wenn Sie Zahlen wie 2.500,00 formatiert zulassen wollen, dann schlage ich diesen Code:

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

Aber es ist dangereous wenn Sie haben Benutzer, die die amerikanische Notation bevorzugen (oder erwarten). Ich würde wahrscheinlich bei der amerikanischen Schreibweise bleiben und einen Fehler anzeigen, wenn das Feld ein Komma enthält.

Beachten Sie, dass HTML5 <input type=number> vorschlägt, wodurch der Benutzer gezwungen wird, die Nummer einzugeben und Nummern direkt abrufen zu lassen. Siehe reference.

+0

Das Problem ist, wenn ich so etwas wie '2 * 2.500,00 = 5' habe und '5.000,00' sein sollte –

+0

Siehe Bearbeiten: Ich schlage eine Lösung dafür vor. –

2

Sieht aus wie Sie Zeichenfolgen von val() Funktion erhalten.

Sie Number verwenden können, oder parseInt oder parseFloat Typen zu werfen

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

Sie haben die Saiten zu analysieren, bevor Sie multiplizieren!

Hinweis: Wenn die Operanden Zahlen sind, wird eine regelmäßige arithmetische Multiplikation durchgeführt, was bedeutet, dass zwei positive oder zwei negative Werte positiv sind, während Operanden mit unterschiedlichen Vorzeichen negativ sind. Wenn das Ergebnis zu hoch oder zu niedrig ist, lautet das Ergebnis entweder Infinity oder -Infinity.

Wenn einer der Operanden NaN ist, ist das Ergebnis NaN.

Wenn Infinity mit 0 multipliziert wird, ist das Ergebnis NaN.

Wenn Infinity mit einer anderen Zahl als 0 multipliziert wird, ist das Ergebnis abhängig vom Vorzeichen des zweiten Operanden entweder Infinity oder -Infinity.

Wenn Infinity mit Infinity multipliziert wird, ist das Ergebnis Infinity.