1.Float精度在JS的解決方案

來源:互聯網
上載者:User

標籤:string   不能   小數   四捨五入   ber   soft   sof   演算法   類型轉換   

  最近做了一個有關折扣價的計算的功能,所有的運算都是在前台通過js來做,做完之後經過手工核算髮現了一個問題,當時做的一個例子是10*0.94,按照我們正常的思維,這個結果應該是9.4,但是在js中的計算結果是9.39999999.....。其實按照二進位的演算法來說js的這個結果是最精確的,但是按照我們正常人的思維來看結果只能是9.4,並且業務要求是不能四捨五入,要強制保留小數位元,所有這樣一來就出問題了,後來在一個技術交流群了裡有群友推薦了下面的解決方案,成功的解決了這個問題,請往下看:

  核心代碼就只有這幾行:

  //1.現將其他資料類型轉換成String類型

  var m=0,s1=arg1.toString(),s2=arg2.toString();
  try{

    //2.對字串分割後取出小數位的長度並得到總的小數位元

    m+=s1.split(‘.‘)[1].length;

    m+=s2.split(‘.‘)[1].length;

    //3.此處原理是將小數轉換為整數相乘然後再除10的m次方即得到最終想要的結果
    returnNumber(s1.replace(‘.‘,‘‘))*Number(s2.replace(‘.‘,‘‘))/Math.pow(10,m);//9.4

  }catch(e){

    e.pringStack();

  }

  

1.Float精度在JS的解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.