求助: 1.025四舍五入后,只等于1.02
本帖最后由 ahancai 于 2014-01-20 16:59:03 编辑
<script type="text/javascript">
function i_round(num,dec){
var sNum = num + '';
var idx = sNum.indexOf(".");
if(idx<0)
return num;
var n = sNum.length - idx -1;
if(dec < n){
var e = Math.pow(10,dec);
return Math.round(num * e) / e;
}else{
return num;
}
}
alert(i_round(2.025,2));
</script>
1.025四舍五入后,只等于1.02
2.025四舍五入后,会等于2.03
有没有大神有解决方法啊.
------解决方案--------------------就算直接用1.025*100也只是102.49999999~,这是javascript本身的精度损失
我用的小数点位移,放个大概
function round(num, n) {
if (isNaN(num)) return 0;
num = num + "";
if (num.indexOf(".") < 0) return num;
var reg = new RegExp("\.([0-9]{" + n + "})"); //创建一个正则,匹配.02这种格式,小数点后位数自定义
num = num.replace(reg, "$1."); //把.02换成02.
alert(Math.round(num) / Math.pow(10, n));
}
有些验证还没加比如没有补位等等~暂时没发现太大的问题
------解决方案--------------------原数字+5/Math.pow(10,dec)后截取dec后的小数位试试
------解决方案--------------------function i_round(num,dec){
var sNum = num + '';
var n = sNum.split('.');
//console.log(n);
if(n.length<2){return num;}
var s1 = n[0],s2='';
for(var i=0;i<n[1].length;i++){
&nb