挖坑
坑一:
在JS中四舍五入的函數(shù) toFixed(n) , n為要保留的小數(shù)位數(shù)舞蔽。?n為0~20渗柿,當n超過20的時候,JS會出錯朵栖。
坑二:當截取小數(shù)點前一位是0時陨溅,輸出結果可能會有所不同。
例如:var a = 0.155;
? ? ? ? ? ? a.toFixed(2);
結果為0.15雹有;
填坑
方法一:
var?num?=?0.155;//要四舍五入的數(shù)字??
var?fixNum?=?new?Number(num+1).toFixed(2);//四舍五入之前加1??
var?fixedNum?=?new?Number(fixNum?-?1).toFixed(2);//四舍五入之后減1霸奕,再四舍五入一下??
alert(fixedNum);//彈出的數(shù)字就是正確的四舍五入結果啦??
方法二:
//?小數(shù)點后N位有效數(shù)字
round:?function?(v,?e)?{
var?t?=?1;
for?(;?e?>?0;?t?*=?10,?e--);
for?(;?e?<?0;?t?/=?10,?e++);
return?Math.round(v?*?t)?/?t;
}
參數(shù)里的:
v表示要轉(zhuǎn)換的值
e表示要保留的位數(shù)
函數(shù)里的兩個for脯厨,這個是重點了,
第一個for針對小數(shù)點右邊的情況合武,也就是保留小數(shù)點右邊多少位稼跳;
第二個for針對小數(shù)點左邊的情況,也就是保留小數(shù)點左邊多少位什猖。
for的作用不狮,就是計算t的值在旱,也就是v應該放大或者縮小多少倍的倍數(shù)(倍數(shù)=t)。
for這里利用到了for里的兩個特性驻仅,條件判斷和計數(shù)器累計(循環(huán)),
當e滿足條件時for繼續(xù)毡泻,并且e每次累加(e的每次累加粘优,就是給for制造不滿足循環(huán)的條件)的同時仇味,也計算t的值。
最后利用了原生的round方法來計算被放大/縮小后的v的結果敬飒,然后把結果放大/縮小到正確的倍數(shù)
(轉(zhuǎn)自:http://www.jb51.net/article/57378.htm)