<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        javascript中toFixed()四舍五入使用方法詳解

        來源:懂視網 責編:小采 時間:2020-11-27 22:06:54
        文檔

        javascript中toFixed()四舍五入使用方法詳解

        javascript中toFixed()四舍五入使用方法詳解:最近做的項目涉及到金額的計算,有一種方式就是進行四舍五入的規則進行小數點后面的尾數處理,以前一直以為toFixed方法就是四舍五入的,知道一個用戶反饋了金額計算的bug我才如夢初醒(虧了一毛錢),才仔細深究了下toFixed這個方法,唉,還是我不夠嚴謹啊,
        推薦度:
        導讀javascript中toFixed()四舍五入使用方法詳解:最近做的項目涉及到金額的計算,有一種方式就是進行四舍五入的規則進行小數點后面的尾數處理,以前一直以為toFixed方法就是四舍五入的,知道一個用戶反饋了金額計算的bug我才如夢初醒(虧了一毛錢),才仔細深究了下toFixed這個方法,唉,還是我不夠嚴謹啊,

        最近做的項目涉及到金額的計算,有一種方式就是進行四舍五入的規則進行小數點后面的尾數處理,以前一直以為toFixed方法就是四舍五入的,知道一個用戶反饋了金額計算的bug我才如夢初醒(虧了一毛錢),才仔細深究了下toFixed這個方法,唉,還是我不夠嚴謹啊,前車之鑒,大家勿走我的老路!

        toFixed還不同的瀏覽器實現,在IE10及以上里面是正常的四舍五入,但是別的瀏覽器里面就不一樣了,它不是正常的四舍五入(等下重點說),比如:

        var a = 1.335;
        console.log(a.toFixed(2))
        // IE 1.34
        //chorme 1.33
        

        其他的瀏覽器我沒去一一測試,所以如果大家用了其他瀏覽器的還是需要去實際測試一下,我這里就說說javascript的toFixed()方法的四舍五入原理:

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

        但是,經過我的測試發現,在chorme下面(最新版),并沒有完全遵守這個規則,尤其是5的后面沒有數字的時候,不是這么判斷的,如下:

        var b = 1.335
        b.toFixed(2)
        "1.33"
        var b = 1.345
        b.toFixed(2)
        "1.34"
        var b = 1.355
        b.toFixed(2)
        "1.35"
        var b = 1.365
        b.toFixed(2)
        "1.36"
        var b = 1.375
        b.toFixed(2)
        "1.38"
        var b = 1.385
        b.toFixed(2)
        "1.39"
        

        可以發現在chorme下沒有完全去遵循這個規律,或許它有自己的算法,但是畢竟它沒有遵循通用的銀行家算法,所以tofixed這個方法在涉及到金錢計算的業務中還是少用,
        最好別用,否則可能會出大問題!
        下面再再說說我自己的做法,就是根據精確位數來取小數點后的數,然后判斷精確位是大于4還是小于等于4,上代碼吧,不說了:
        我們的業務是最多精確到分,也就是兩位小數,最少就是取整,不留小數

        function moneySwitch(money, precision){//precision是需要精確的位數,如百分位就是2
         var result = 0;
         //先進行一個千分位的四舍五入,保證3.0999這種情況在保留一位小數的時候能是對的,這一位可以這么做沒什么問題
         var money = parseFloat(money).toFixed(3);
         try{
         var int_part = money.split(".")[0], //小數點前的整數
         point_num = money.split(".")[1],//取小數點后面的小數
         precision_num = point_num[3-precision];
         if(precision_num>4){//五入的情況
         if(precision==1){
         point_num = parseInt(point_num)+10+"";
         if(point_num.length>3){//說明往整數位進1
         int_part = parseInt(int_part)+1+"";
         point_num = point_num[1]+point_num[2];
         }else{
         point_num = point_num[0]+point_num[1];
         }
         result = parseFloat(int_part+"."+point_num);
         }else if(precision==2){
         point_num = parseInt(point_num)+100+"";
         if(point_num.length>3){//說明往整數位進1
         int_part = parseInt(int_part)+1+"";
         point_num = point_num[1];
         }else{
         point_num = point_num[0];
         }
         result = parseFloat(int_part+"."+point_num);
         }else if(precision==3){
         int_part = parseInt(int_part)+1+"";
         point_num = 0;
         }
         result = parseFloat(int_part+"."+point_num);
         }else{//四舍的情況
         if(precision==1){
         point_num = point_num[0]+point_num[1];
         }else if(precision==2){
         point_num = point_num[0];
         }else if(precision==3){
         point_num = 0;
         }
         result = parseFloat(int_part+"."+point_num);
         } 
         }catch(e){
         return parseFloat(money).toFixed(2);//如果過程中有出錯就tofixed代替為解決
         }
         return result;
        }

        補充:

        js處理數字保留2位小數,強制保留2位小數不夠補上.00

        1、保留兩位小數 //功能:將浮點數四舍五入,取小數點后2位

        2、//制保留2位小數,如:2,會在2后面補上00.即2.00

        <!DOCTYPE html>
        <html>
        <head>
        <meta charset="UTF-8">
        <title>Test</title>
        <script type="text/javascript" src="js/jq.js"></script>
        </head>
        <script type="text/javascript"> 
         //保留兩位小數 
         //功能:將浮點數四舍五入,取小數點后2位 
         function toDecimal(x) { 
         var f = parseFloat(x); 
         if (isNaN(f)) { 
         return; 
         } 
         f = Math.round(x*100)/100; 
         return f; 
         } 
         
         
         //制保留2位小數,如:2,會在2后面補上00.即2.00 
         function toDecimal2(x) { 
         var f = parseFloat(x); 
         if (isNaN(f)) { 
         return false; 
         } 
         var f = Math.round(x*100)/100; 
         var s = f.toString(); 
         var rs = s.indexOf('.'); 
         if (rs < 0) { 
         rs = s.length; 
         s += '.'; 
         } 
         while (s.length <= rs + 2) { 
         s += '0'; 
         } 
         return s; 
         } 
         
         function fomatFloat(src,pos){ 
         return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos); 
         } 
         
         document.write("四舍五入 <br/>")
         document.write("3.14159267保留2位小數:" + toDecimal(3.14159267)+"<br/>"); 
         document.write("3.14159267強制保留2位小數:" + toDecimal2(3.14159267)+"<br/>"); 
         document.write("3.14159267保留2位小數:" + toDecimal(3.14559267)+"<br/>"); 
         document.write("3.14159267強制保留2位小數:" + toDecimal2(3.15159267)+"<br/>"); 
         document.write("3.14159267保留2位小數:" + fomatFloat(3.14559267, 2)+"<br/>"); 
         document.write("3.14159267保留1位小數:" + fomatFloat(3.15159267, 1)+"<br/>"); 
         
         document.write("五舍六入 <br/>")
         document.write("1000.003保留2位小數:" + 1000.003.toFixed(2)+"<br/>"); 
         document.write("1000.08保留1位小數:" + 1000.08.toFixed(1)+"<br/>"); 
         document.write("1000.04保留1位小數:" + 1000.04.toFixed(1)+"<br/>"); 
         document.write("1000.05保留1位小數:" + 1000.05.toFixed(1)+"<br/>"); 
         
         document.write("科學計數 <br/>")
         document.write(3.1415+"科學技術后:"+3.1415.toExponential(2)+"<br/>"); 
         document.write(3.1455+"科學技術后:"+3.1455.toExponential(2)+"<br/>"); 
         document.write(3.1445+"科學技術后:"+3.1445.toExponential(2)+"<br/>"); 
         document.write(3.1465+"科學技術后:"+3.1465.toExponential(2)+"<br/>"); 
         document.write(3.1665+"科學技術后:"+3.1665.toExponential(1)+"<br/>"); 
         document.write("精確到n位,不含n位 <br/>")
         document.write("3.1415精確到小數點第2位" + 3.1415.toPrecision(2)+"<br/>"); 
         document.write("3.1455精確到小數點第3位" + 3.1465.toPrecision(3)+"<br/>"); 
         document.write("3.1445精確到小數點第2位" + 3.1415.toPrecision(2)+"<br/>"); 
         document.write("3.1465精確到小數點第2位" + 3.1455.toPrecision(2)+"<br/>"); 
         document.write("3.166592679287精確到小數點第5位" + 3.141592679287.toPrecision(5)+"<br/>"); 
        </script> 
        <body>
        <input type="text" id="Score" />
        </body>
        </html>
        

        這篇關于toFixed()的文章就介紹到這了,希望大家以后多多支持腳本之家。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        javascript中toFixed()四舍五入使用方法詳解

        javascript中toFixed()四舍五入使用方法詳解:最近做的項目涉及到金額的計算,有一種方式就是進行四舍五入的規則進行小數點后面的尾數處理,以前一直以為toFixed方法就是四舍五入的,知道一個用戶反饋了金額計算的bug我才如夢初醒(虧了一毛錢),才仔細深究了下toFixed這個方法,唉,還是我不夠嚴謹啊,
        推薦度:
        標簽: 方法 用法 js
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 四虎永久在线精品免费影视| 亚洲欧洲精品无码AV| 亚洲综合综合在线| 精品无码AV无码免费专区| 亚洲av无码专区在线播放| 亚洲中文字幕日本无线码| EEUSS影院WWW在线观看免费 | www.免费在线观看| 国产在线ts人妖免费视频| 亚洲av无码片在线播放| 亚欧免费无码aⅴ在线观看| 亚洲AV成人片色在线观看| 男男黄GAY片免费网站WWW| 99视频免费观看| 亚洲高清无在码在线电影不卡| 久久久久亚洲国产AV麻豆| 日韩免费观看视频| 亚洲精品免费在线| 国产免费久久精品99re丫y| 亚洲欧美日韩综合久久久久 | 久久亚洲精品视频| 美丽姑娘免费观看在线观看中文版| 亚洲AV日韩AV永久无码下载| 在线日本高清免费不卡| 亚洲一卡一卡二新区无人区| 亚洲av无码天堂一区二区三区 | 国产一精品一AV一免费| 四虎在线播放免费永久视频| yellow视频免费在线观看| 亚洲国产精品婷婷久久| 在线中文高清资源免费观看| 久久91亚洲精品中文字幕| 97视频热人人精品免费| 美女被免费网站视频在线| 国产高清免费观看| 成人无码a级毛片免费| 亚洲精品国产精品乱码不99| 精品免费久久久久国产一区| 亚洲成年人免费网站| 亚洲精品在线免费观看视频| 中文字幕在线观看亚洲视频|