国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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
主站蜘蛛池模板: 国内精品一区二区 | 精品一区二区三区的国产在线观看 | 麻豆国产高清精品国在线 | 亚洲一区中文字幕在线 | 国产福利久久青青草原下载 | 国产免费自拍 | 国产精品成人一区二区 | 最新国产精品视频 | 欧美精品在线看 | 国产成人综合久久精品亚洲 | 日韩欧美国产中文字幕 | 亚洲视频在线免费看 | 免费看日产一区二区三区 | 不卡一级aaa全黄毛片 | 男女男精品网站 | 97成人免费视频 | 久久久91精品国产一区二区 | 欧美久久天天综合香蕉伊 | 97伊人久久 | xx欧美| 中文亚洲欧美日韩无线码 | 国产毛片一区二区三区精品 | 亚洲电影网址 | 日本国产一区 | 国产精品不卡在线 | 福利片一区二区 | 日韩欧美色视频 | 国产亚洲一区二区三区不卡 | 国产精品ⅴ视频免费观看 | 青青国产成人久久激情91麻豆 | xxxwww欧美性| 国产对白在线播放九色 | 一区二区三区在线播放 | 国产日韩一区二区三区在线播放 | 激情午夜婷婷 | 亚洲三级电影在线 | 免费大黄网站 | 欧美一区二区日韩一区二区 | 国产精品久久久久久久y | 欧美a色爱欧美综合v | 免费又黄又爽又猛大片午夜 |