2010-07-27 4 views
21

Ich habe diese Funktion JavaScript:Javascript: zwei Schwimmer Vergleich von Werten

Contrl.prototype.EvaluateStatement = function(acVal, cfVal) { 

    var cv = parseFloat(cfVal).toFixed(2); 
    var av = parseFloat(acVal).toFixed(2); 

    if(av < cv) // do some thing 
} 

Wenn ich Float-Zahlen av=7.00 und cv=12.00 das Ergebnis 7.00<12.00 vergleichen ist false!

Irgendwelche Ideen warum?

+0

Dies wurde mich verrückt, danke für die Frage! – Ish

Antwort

35

toFixed gibt eine Zeichenfolge zurück, und Sie vergleichen die beiden resultierenden Zeichenfolgen. Lexikalisch, kommt der 1 in 12, bevor die 7 so 12 < 7.

ich Sie erraten, wie etwas vergleichen wollen:

(Math.round(parseFloat(acVal)*100)/100) 

die

+2

Rundung auf zwei Dezimalstellen unter Beibehaltung einer Zahl: 'Math.round (parseFloat (cfVal) * 100)/100' – Tomalak

1

Vergleich Floats mit kurzen Notation auf zwei Dezimalstellen rundet nimmt auch Schwimmer als Strings und ganzen Zahlen:

var floatOne = 2, floatTwo = '1.456'; 

Math.floor(floatOne*100) > Math.floor(floatTwo*100) 

Note (!): Vergleich geschieht usi ng ganze Zahlen. Was passiert eigentlich hinter den Kulissen: 200 > 145

Erweitern Sie 100 mit Nullen für mehr Dezimalgenauigkeit. Verwenden Sie beispielsweise 1000 für 3 Dezimalstellen.

Test:

var floatOne = 2, floatTwo = '1.456'; 
 
console.log(Math.floor(floatOne*100), '>', Math.floor(floatTwo*100), '=', Math.floor(floatOne*100) > Math.floor(floatTwo*100));