js解決0.1+0.2==0.3的問題的幾種方法

js解決0.1+0.2==0.3的問題的幾種方法

JavaScript有7種基本類型分別是: Undefined, Null, Boolean, String, Number, Symbol, Object.chrome

對於JS中的Number類型, 不區分整數和浮點數, 浮點數的精度遠遠不如整數, 首先先看一下爲何會出現這個問題, 根據雙精度浮點數的定義, Number類型的有效整數範圍是-0XFFFFFFFFFFF至0X1FFFFFFFFFF,因此沒法精確到超過這個範圍的整數. 函數

解決辦法
1.ES6提供的Number.EPSILON方法性能

function numbersequal(a,b){ return Math.abs(a-b)<Number.EPSILON;
} 
var a=0.1+0.2, b=0.3;
console.log(numbersequal(a,b)); //true

考慮兼容性的問題了,在chrome中支持這個屬性,可是IE並不支持(筆者的版本是IE10不兼容),因此咱們還要解決IE的不兼容問題。code

Number.EPSILON=(function(){   //解決兼容性問題
        return Number.EPSILON?Number.EPSILON:Math.pow(2,-52);
      })();
//上面是一個自調用函數,當JS文件剛加載到內存中,就會去判斷並返回一個結果,相比if(!Number.EPSILON){
  //   Number.EPSILON=Math.pow(2,-52);
  //}這種代碼更節約性能,也更美觀。
function numbersequal(a,b){ 
    return Math.abs(a-b)<Number.EPSILON;
  }
//接下來再判斷   
    var a=0.1+0.2, b=0.3;
  console.log(numbersequal(a,b)); //這裏就爲true了

2.把計算數字 提高 10 的N次方 倍 再 除以 10的N次方。N>1.ip

(0.1*1000+0.2*1000)/1000==0.3
//true
相關文章
相關標籤/搜索