簡體   English   中英

Javascript:比較兩個浮點值

[英]Javascript: Comparing two float values

我有這個JavaScript函數:

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

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

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

當我比較浮點數av=7.00cv=12.007.00<12.00的結果是false

有什么想法嗎?

toFixed返回一個字符串,並且您正在比較兩個結果字符串。 從詞匯上看,12比1來自7比12比7。

我猜你想比較一下:

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

它舍入到小數點后兩位

比較浮點數與精度:

var precision = 0.001;

if (Math.abs(n1 - n2) <= precision) {
  // equal
}
else {
  // not equal
}

UPD:或者,如果其中一個數字是精確的,則將精度與相對誤差進行比較

var absoluteError = (Math.abs(nApprox - nExact)),
  relativeError = absoluteError / nExact;

return (relativeError <= precision);

使用短符號比較浮點數,也接受浮點數作為字符串和整數:

var floatOne = 2, floatTwo = '1.456';

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

(!)注意:使用整數進行比較。 幕后實際發生的事情: 200 > 145

使用零擴展100以獲得更多小數精度。 例如,使用1000表示3位小數精度。

測試:

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

Math.fround()函數返回Number的最近的32位單精度浮點表示。

因此是比較2個花車的最佳選擇之一。

if (Math.fround(1.5) < Math.fround(1.6)) {
    console.log('yes')
} else {
    console.log('no')
}

>>> yes

// More examples:
console.log(Math.fround(0.9) < Math.fround(1));                            >>> true
console.log(Math.fround(1.5) < Math.fround(1.6));                          >>> true
console.log(Math.fround(0.005) < Math.fround(0.00006));                    >>> false
console.log(Math.fround(0.00000000009) < Math.fround(0.0000000000000009)); >>> false

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM