• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
    當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

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

    來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:06:54
    文檔

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

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

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

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

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

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

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

    但是,經(jīng)過我的測(cè)試發(fā)現(xiàn),在chorme下面(最新版),并沒有完全遵守這個(gè)規(guī)則,尤其是5的后面沒有數(shù)字的時(shí)候,不是這么判斷的,如下:

    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"
    

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

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

    補(bǔ)充:

    js處理數(shù)字保留2位小數(shù),強(qiáng)制保留2位小數(shù)不夠補(bǔ)上.00

    1、保留兩位小數(shù) //功能:將浮點(diǎn)數(shù)四舍五入,取小數(shù)點(diǎn)后2位

    2、//制保留2位小數(shù),如:2,會(huì)在2后面補(bǔ)上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"> 
     //保留兩位小數(shù) 
     //功能:將浮點(diǎn)數(shù)四舍五入,取小數(shù)點(diǎn)后2位 
     function toDecimal(x) { 
     var f = parseFloat(x); 
     if (isNaN(f)) { 
     return; 
     } 
     f = Math.round(x*100)/100; 
     return f; 
     } 
     
     
     //制保留2位小數(shù),如:2,會(huì)在2后面補(bǔ)上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位小數(shù):" + toDecimal(3.14159267)+"<br/>"); 
     document.write("3.14159267強(qiáng)制保留2位小數(shù):" + toDecimal2(3.14159267)+"<br/>"); 
     document.write("3.14159267保留2位小數(shù):" + toDecimal(3.14559267)+"<br/>"); 
     document.write("3.14159267強(qiáng)制保留2位小數(shù):" + toDecimal2(3.15159267)+"<br/>"); 
     document.write("3.14159267保留2位小數(shù):" + fomatFloat(3.14559267, 2)+"<br/>"); 
     document.write("3.14159267保留1位小數(shù):" + fomatFloat(3.15159267, 1)+"<br/>"); 
     
     document.write("五舍六入 <br/>")
     document.write("1000.003保留2位小數(shù):" + 1000.003.toFixed(2)+"<br/>"); 
     document.write("1000.08保留1位小數(shù):" + 1000.08.toFixed(1)+"<br/>"); 
     document.write("1000.04保留1位小數(shù):" + 1000.04.toFixed(1)+"<br/>"); 
     document.write("1000.05保留1位小數(shù):" + 1000.05.toFixed(1)+"<br/>"); 
     
     document.write("科學(xué)計(jì)數(shù) <br/>")
     document.write(3.1415+"科學(xué)技術(shù)后:"+3.1415.toExponential(2)+"<br/>"); 
     document.write(3.1455+"科學(xué)技術(shù)后:"+3.1455.toExponential(2)+"<br/>"); 
     document.write(3.1445+"科學(xué)技術(shù)后:"+3.1445.toExponential(2)+"<br/>"); 
     document.write(3.1465+"科學(xué)技術(shù)后:"+3.1465.toExponential(2)+"<br/>"); 
     document.write(3.1665+"科學(xué)技術(shù)后:"+3.1665.toExponential(1)+"<br/>"); 
     document.write("精確到n位,不含n位 <br/>")
     document.write("3.1415精確到小數(shù)點(diǎn)第2位" + 3.1415.toPrecision(2)+"<br/>"); 
     document.write("3.1455精確到小數(shù)點(diǎn)第3位" + 3.1465.toPrecision(3)+"<br/>"); 
     document.write("3.1445精確到小數(shù)點(diǎn)第2位" + 3.1415.toPrecision(2)+"<br/>"); 
     document.write("3.1465精確到小數(shù)點(diǎn)第2位" + 3.1455.toPrecision(2)+"<br/>"); 
     document.write("3.166592679287精確到小數(shù)點(diǎn)第5位" + 3.141592679287.toPrecision(5)+"<br/>"); 
    </script> 
    <body>
    <input type="text" id="Score" />
    </body>
    </html>
    

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

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

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

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

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 麻豆aⅴ精品无码一区二区| 久久99精品国产99久久6男男| 国产成人精品日本亚洲网站| 欧美精品高清在线xxxx| 青青草国产精品久久久久| 精品无码国产一区二区三区51安 | 久久精品国产清高在天天线| 久久亚洲精品无码观看不卡| 真实国产乱子伦精品免费| 国产成人精品日本亚洲| 久久精品国产亚洲精品2020| 中文字幕日韩精品无码内射| 久久99精品久久久久久噜噜| 99久久精品免费国产大片| 国产精品视频久久久| 精品国偷自产在线| 精品综合久久久久久888蜜芽| 亚洲国产精品无码久久久不卡| 天天爽夜夜爽8888视频精品| 久久久久国产精品三级网| 狠狠精品干练久久久无码中文字幕| 97久久精品人人澡人人爽| 精品国产亚洲一区二区三区| 2022国产精品福利在线观看| 国产精品99精品无码视亚| 国产精品igao视频网网址| 国产精品水嫩水嫩| 国产精品香港三级国产AV| 国产精品兄妹在线观看麻豆| 国产AV国片精品| 99热在线日韩精品免费| 国产精品成人在线| 老司机69精品成免费视频| 亚洲国产精品人久久| 午夜精品成年片色多多| 亚洲国产精品久久久久| 国产精品爱搞视频网站 | 精品视频在线观看你懂的一区 | 日韩人妻无码精品一专区| 亚洲精品午夜无码电影网| 亚洲AV永久纯肉无码精品动漫|