jquery的toFixed方法的正確使用


最近一段時候公司的項目中遇到這么個事情,需要計算手續費,而這個手續費必須是保留小數點后面兩位,且是由小數點后面第三位四舍五入,就這么個場景:

說說我計算的過程,下面是前兩個數是測試用的:

howMuch = 119;

allow_sum = 116;

interest = 0.005;//這是利率

計算出來的是(119-116)*0.005 = 0.015,按照業務要求四舍五入保留小數點后2位,結果應該是0.02

1.一開始直接使用的toFixed方法計算的手續費:

  計算方式:value = (((howMuch-allow_sum)*interest*100)/100).toFixed(2);

  計算結果:0.01

  原因:toFixed它是一個四舍六入五成雙的詭異的方法,"四舍六入五成雙"含義:對於位數很多的近似數,當有效位數確定后,其后面多余的數字應該舍去,只保留有效數字最末一位,這種修約(舍入)規則是“四舍六入五成雙”,也即“4舍6入5湊偶”這里“四”是指≤4 時舍去,"六"是指≥6時進上,"五"指的是根據5后面的數字來定,當5后有數時,舍5入1;當5后無有效數字時,需要分兩種情況來講:①5前為奇數,舍5入1;②5前為偶數,舍5不進。(0是偶數)  

2.發現問題后我就換了一種方法[Math.round()],這種方法避免了上面的問題:

  計算方式:value = Math.round((howMuch-allow_sum)*interest*100)/100;

  計算結果:0.02

  雖然避免了上面的問題,在特定的情況下有引發了新的問題,比如:

    howMuch = 119;

    allow_sum = 100;

    計算方式:value = Math.round((howMuch-allow_sum)*interest*100)/100;

    計算結果:計算出來的是(119-100)*0.005 = 0.095,四舍五入就變成了0.1了,而業務需求是小數點后面兩位,也就是0.10

3.發現上一個問題后,我決定把兩個方法結合起來使用:

  計算方式:value = (Math.round((howMuch-allow_sum)*interest*100)/100).toFixed(2);

  計算結果:計算出來的是(119-100)*0.005 = 0.095,四舍五入后是0.10,剛好符合業務的要求

 

寫的不對的地方,歡迎留言指正,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM