js处理金额相关:精确小数计算、校验数据、千分符等

708 阅读1分钟

​本文已参与「新人创作礼」活动,一起开启掘金创作之路。

数字校验:

//校验数字 返回true 不是数字 false是数字
function checknumber(String){ 
   // isNaN()函数 把空串 空格 以及NUll 按照0来处理 所以先去除
   if(val === "" || val ==null){
        return true;
    }
    if(!isNaN(val)){
        return false;
    }else{
        return true;
    }
} 
//应用
var num = $("#num").val();
if(checknumber(num)){//不是数字
	top.$.jBox.tip("num不是纯数字");
    return;
}

实现千分符样式:

$(document).ready(function(){
	//初始化千分符
	$(".moneyFormat").formatCurrency();
	$(".moneyFormat").bind("change",function(){
		$(this).formatCurrency();
	})	
})
//应用
<input id="num" name="num" 
	   type="text" 
	   value="" 
	   class="input-small moneyFormat required"/>

去掉千分符:

//应用
var num = $("#num").val();
num.replace(/,/gi, '')

遍历表格校验时注意:

//表格中数字校验
function check(){
	//定义标识:因为return仅仅是停止循环,不能使整个function停止或返回false
	var flagA = true;
	$("table tr[name='xxList']").each(function(){
		var num = $(this).find("td").eq(8).find("input").val();
		//校验是否是数字前去掉千分符
		var num = num.replace(/,/gi, '');
		if(checknumber(num)){//不是数字
			top.$.jBox.tip("应缴保费只能为数字");
			flagA = false;
			return;
		}
	});
	if(!flagA){//不通过
		return false;
	}
}

js计算小数时结果不准确问题的解决

简单代码演示

// 不采取任何措施的时候
var result = 0.18+0.72;
console.log("0.18+0.72="+result)

js计算不准确问题

查阅资料

js计算时,会将十进制转换成二进制,再进行计算,但有些小数转换成二进制时候,出现了无限循环,由于位数有限,所以就出现了截取,所以就导致了再转化成十进制后结果的不精确.所以就出现这种情况。

解决方案(引入使用math.js)

  1. 如下在前端页面添加math.js
// 引入
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/3.14.2/math.min.js"></script>
  1. 使用math中方法,此处仅举例加法
// 使用math.js里的方法进行计算
var result = math.number(math.add(math.bignumber(0.18),math.bignumber(0.72)));
console.log("0.18+0.72="+result)

math.js方法