求正确的自定义保留N位小数的四舍五入方法?

时间:2021-07-04 09:43:04
如题,虽然JS本身有四舍五入方法,网络上也有不少这类型的方法但是经测试始终达不到正确的效果。
例如要保留2位小数: 2.4 + 4.8 = 7.20 ,但试用了网络上的几种方式得到的结果却是 7.1999  
真的好郁闷....
哪位朋友有正确的 四舍五入 方法?

9 个解决方案

#1


//num表示要四舍五入的数,v表示要保留的小数位数。
function decimal(num,v)
{
    var vv = Math.pow(10,v);
    return Math.round(num*vv)/vv;
}

#2


num.toFixed(2)

#3


想看看你的代码 
 

#4


num.tofixed(2)

#5


		function round(num, digit){
var multiple = Math.pow(10, digit),
_num = num * multiple;
return Math.round(_num) / multiple;
}

alert(round(2.4168, 2)); // 2.42
alert(round(2.4168, 1)); // 2.4

#6


谢谢,先试用下

#7



function format(v,p)
{
if(!(+v===v&&+p===p&&p>=0&&p<=8)) return v;
var result = '';
var r = (v*Math.pow(10,p)+.5|0)/Math.pow(10,p);
var t = ''+r;
var a = t.split('.');
result = t+((p>0&&a.length^2)?'.':'');
for(i=0;i<p-(a.length^1?a[1].length:0);i++)
{
result += '0';
}
return result;
}

//测试用例
var u = [[2.4+4.8,3],[1,2],['abc',2],[3.33333,9]];
for(n=0;n<u.length;n++)
{
alert(n+":format("+u[n][0]+","+u[n][1]+") : "+format(u[n][0],u[n][1]));
}

#8


!(+v===v&&+p===p&&p>=0&&p<=8)
能解析下 这里的3个 “=”是神马意思呢?
我还是第一次看到这样的使用方式

#9


引用 8 楼 kinghome 的回复:
!(+v===v&amp;&amp;+p===p&amp;&amp;p>=0&amp;&amp;p<=8)
能解析下 这里的3个 “=”是神马意思呢?
我还是第一次看到这样的使用方式


判断是否数字。p判断并不严格,按说应该是整形数字0-8,超过9位的会有精度问题

#1


//num表示要四舍五入的数,v表示要保留的小数位数。
function decimal(num,v)
{
    var vv = Math.pow(10,v);
    return Math.round(num*vv)/vv;
}

#2


num.toFixed(2)

#3


想看看你的代码 
 

#4


num.tofixed(2)

#5


		function round(num, digit){
var multiple = Math.pow(10, digit),
_num = num * multiple;
return Math.round(_num) / multiple;
}

alert(round(2.4168, 2)); // 2.42
alert(round(2.4168, 1)); // 2.4

#6


谢谢,先试用下

#7



function format(v,p)
{
if(!(+v===v&&+p===p&&p>=0&&p<=8)) return v;
var result = '';
var r = (v*Math.pow(10,p)+.5|0)/Math.pow(10,p);
var t = ''+r;
var a = t.split('.');
result = t+((p>0&&a.length^2)?'.':'');
for(i=0;i<p-(a.length^1?a[1].length:0);i++)
{
result += '0';
}
return result;
}

//测试用例
var u = [[2.4+4.8,3],[1,2],['abc',2],[3.33333,9]];
for(n=0;n<u.length;n++)
{
alert(n+":format("+u[n][0]+","+u[n][1]+") : "+format(u[n][0],u[n][1]));
}

#8


!(+v===v&&+p===p&&p>=0&&p<=8)
能解析下 这里的3个 “=”是神马意思呢?
我还是第一次看到这样的使用方式

#9


引用 8 楼 kinghome 的回复:
!(+v===v&amp;&amp;+p===p&amp;&amp;p>=0&amp;&amp;p<=8)
能解析下 这里的3个 “=”是神马意思呢?
我还是第一次看到这样的使用方式


判断是否数字。p判断并不严格,按说应该是整形数字0-8,超过9位的会有精度问题