当前位置 : 主页 > 网络编程 > JavaScript >

js浮点数运算异常解决方案

来源:互联网 收集:自由互联 发布时间:2021-06-28
参考至: oschina.net杨意社的博客 /** * 数据处理-准确(准确程度视位数而定)的加减法 * @param arrNum 加减数的数组 * @param isNum(选填)返回结果是否为数字,默认返回字符串 * @param digits (选填)精
参考至: oschina.net杨意社的博客
/**
 * 数据处理-准确(准确程度视位数而定)的加减法
 * @param arrNum 加减数的数组
 * @param isNum	(选填)返回结果是否为数字,默认返回字符串
 * @param digits (选填)精确位数,默认为2位
 * @returns
 */
function sum_pack(arrNum,isNum,digits){
	digits=digits||2;
	isNum=isNum||false;
	var multi=Math.pow(10,digits);
	var intSum=0;
	for(var i in arrNum){
		var num=arrNum[i];
	    if(num!=''&&!isNaN(num)){
	    	var fltNum=parseFloat(num);
	    	//此处也可考虑将四舍五入放在加减后进行,视业务需求而定
	    	var intNum=Math.round(fltNum*multi);
	    	intSum+=intNum;
	    }else if(isNaN(num)){
	    	console.log('can not parse : '+num);
	    }
	}
	var fltSum=intSum/multi;
	if(isNum){
		return fltSum;
	}else{
	    return fltSum.toFixed(digits);
	}
}
gistfile1.txt
var s='5.678';
var arrNum=[1,'2.3',-4,-s];//-s在js中会自动取相反数,负数亦然
var sum1=sum_pack(arrNum);
var sum2=sum_pack(arrNum,true);
var sum3=sum_pack(arrNum,true,3);
console.log(sum1);//print:-6.4,字符串类型
console.log(sum2);//print:-6.4,数字类型
console.log(sum3);//print:-6.38,数字类型
网友评论