我测试了你的表达式,结果是3488.4849999999997。四舍五入为3488.48。
javascript做浮点数运算时,由于浮点数精度的问题,会造成运算结果不准确。
解决办法是:将小数运算转化为整数运算,这样就不会丢失精度。
function multiply(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)
}
multiply(500.50,6.97);
/*
3488.485
*/
既想保证精度,又想简单,那没有这样的方法。其实这个方法本身并不复杂。
求网友推荐~
请注意,在js中由于小数精度原因,500.50*6.97 = 3488.4849999999996,因此你toFixed(2)为3488.48,通常可以这样处理:
var n = (500.50*100)*(6.97*100);
var num = new Number(n/10000).toFixed(2); //结果:3488.49