js常用小方法,浮點數的計算等
阿新 • • 發佈:2019-02-07
var trimNumber = function(number) { // 按實際的小數位顯示, 最多兩位小數. // 1.23=1.23, 1.20=1.2, 1.00=1 if (number.toFixed(1)*1 != number.toFixed(2)*1) { return number.toFixed(2); } else if (number.toFixed(0)*1 != number.toFixed(1)*1) { return number.toFixed(1); } else { return number.toFixed(0); } };
// 去重 oArr nArr map var nArr = []; var map ; for(var i in oArr){ map.put(oArr[i].FIELD_DS7.split('-')[0],oArr[i].FIELD_DS7); if(!map.get((oArr[i].FIELD_DS7.split('-')[0])){ nArr.push(oArr[i]) } } // 排序[] -- [{}]型別根據某個attr排序 function compare(attr){ return function(a,b){ var v1 = a[attr]; var v2 = b[attr]; return v1 - v2; } } //浮點數加法運算 function FloatAdd(arg1,arg2){ var r1,r2,m; try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0} m=Math.pow(10,Math.max(r1,r2)) return (arg1*m+arg2*m)/m } //浮點數減法運算 function FloatSub(arg1,arg2){ var r1,r2,m,n; try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0} m=Math.pow(10,Math.max(r1,r2)); //動態控制精度長度 n=(r1>=r2)?r1:r2; return ((arg1*m-arg2*m)/m).toFixed(n); } //浮點數乘法運算 function FloatMul(arg1,arg2) { var m=0,s1=arg1.toString(),s2=arg2.toString(); try{m+=s1.split(".")[1].length}catch(e){} try{m+=s2.split(".")[1].length}catch(e){} return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m) } //浮點數除法運算 function FloatDiv(arg1,arg2){ var t1=0,t2=0,r1,r2; try{t1=arg1.toString().split(".")[1].length}catch(e){} try{t2=arg2.toString().split(".")[1].length}catch(e){} with(Math){ r1=Number(arg1.toString().replace(".","")) r2=Number(arg2.toString().replace(".","")) return (r1/r2)*pow(10,t2-t1); } } 但是以上方法仍然不能完好的控制精度,還得需要保留小數位數的方法控制,於是改寫了某位大人的方法 function to2bits(flt,pos) { var rd=1; for(var i=1;i<=parseInt(pos);i++) { rd=rd*10; } if(parseFloat(flt) == flt) return Math.round(flt * rd) / rd; else return 0; } 將兩個方法結合起來基本上能獲得滿意的效果,例如,加法運算變成 //浮點數加法運算 function FloatAdd(arg1,arg2){ var r1,r2,m; try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0} m=Math.pow(10,Math.max(r1,r2)) return to2bits((arg1*m+arg2*m)/m,2); } 以上結果保留兩位小數:)其它的大家自己試試吧 呼叫的例子: var centerLng = FloatDiv((FloatAdd(a,b)),2); //(a+b)/2