javascript 四舍五入数值 兼容主流浏览器

/**
功能:四舍五入数值
@author:qilb/2013-12-26
@param v----需四舍五入的值 ,n---小数点位保留位数
**/
function  toDecimal(v,n) {
// 用正则表达式将前后空格
var val = v.replace(/[^\d\.-]/g, "");
var arr = val.split(".");
var sufFix = "";//后缀,小数后位数
var inBit = 0;//进位
var preFix = 0;//前缀
var i = 0;
if(arr.length<2){
 i = n;//无小数位则直接补足零位数
}else{
	sufFix = arr[1];
	if(arr[1].length<n){
	i = n-arr[1].length;//不足补零
	}
}
while(i>0){
 sufFix += "0";//不足补零
 i--;
}
//处理小数后位数对进行进位操作
var _sufArr=sufFix.split("");
var _nSufFix= "";
if(n<_sufArr.length ){
	   for(var i=_sufArr.length-1;i>=0;i--){
		 if(i<n){
		  _nSufFix = (parseInt(_sufArr[i])+inBit)%10+_nSufFix;
		   if((parseInt(_sufArr[i])+inBit)>=10){
			 inBit = 1;//在位数内只有大于9才进位
			 }else{
			 	inBit = 0;
			 }
		 }else if(n==i && (parseInt(_sufArr[i]))>=5){
		     inBit = 1;//多余位数,大于4则向上进位
		 }else{
		 inBit = 0;
		 }
		}
	 }else{
	 _nSufFix += sufFix;
	 }
//处理小数点前整数
if(arr[0].indexOf("-")>-1){
if(parseInt(arr[0]) == 0){
 preFix = "-"+(parseFloat(arr[0])+inBit);//负零点多要特别处理
}else{
	preFix = parseFloat(arr[0])-inBit;//负数进位则是减去进位数
}


}else{
 	preFix = parseFloat(arr[0])+inBit; //正数则是加上进位数
}
	if(n>0){//有保留位数
		//return parseFloat(preFix+"."+_nSufFix); //返回Float小数  会自动省去小数后位0
		return preFix+"."+_nSufFix; //返回字符串
	}else{//无保留位数
		return parseFloat(preFix)
	}
}



今天公司同事做外汇项目需要对金额四舍五入,他网上找的一些方法或函数只针只能针对某个浏览器是可行的,换另外一种则就四舍五入结果错误,所以就抽点时间帮同事写了一个方法,经测试在现有浏览器上测试都是很可的。 由于水平有限不对的地方或有更好的方法,可以留言讨论。谢谢。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值