2010-07-27 19 views
21

Ho questa funzione JavaScript:Javascript: confronto tra due float valori

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

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

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

Quando ho confrontare numeri float av=7.00 e cv=12.00 il risultato di 7.00<12.00 è false!

Qualche idea, perché?

+0

Questo mi stava guidando i dadi, grazie per la domanda! – Ish

risposta

35

toFixed restituisce una stringa e si confrontano le due stringhe risultanti. Lessicalmente, la 1 a 12 viene prima del 7, in modo 12 < 7.

Credo che si desidera confrontare qualcosa di simile:

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

che arrotonda a due decimali

+2

Arrotondare a due decimali mantenendo un numero: 'Math.round (parseFloat (cfVal) * 100)/100' – Tomalak

1

Confrontando i carri usando la notazione breve , accetta anche i galleggianti come stringhe e numeri interi:

var floatOne = 2, floatTwo = '1.456'; 

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

Nota (!): Confronto accade USI ng interi. Cosa succede realmente dietro le quinte: 200 > 145

Estendere 100 con zero per una maggiore precisione decimale. Ad esempio, utilizzare la precisione di 1000 per 3 decimali.

prova:

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

Problemi correlati