js小数运算的时候也可能会精度丢失,以下是解决方案

/**
 * @param a
 * @param b
 * 
 * 整体思路:
 * 	如果两个数有小数, 先把小数转换为整数, 再进行运算, 运算后再转为小数. 整数运算就不存在精度丢失了.
 */
function numberSubtract(a, b){
	if (a == null && b == null) return;
	if (a == null) return b;
	if (b == null) return a;
	
	if(a != null && b != null){
		let str_a = "", str_b = "";
		
		let scale_a = 0, scale_b = 0;
		let no_e_a = true, no_e_b = true;
		let m = 0;
		
		str_a = a.toString();//toString 是函数,而不是属性
		str_b = b.toString();
		
		if(str_a.indexOf(".") != -1){//js 没有 contains 函数, 可以使用 indexOf 来代替
			try {
				scale_a = str_a.split(".")[1].length;
			} catch (e) {
				no_e_a = false;
			}
		}else no_e_a = false;
		
		if(str_b.indexOf(".") != -1){
			try {
				scale_b = str_b.split(".")[1].length;
			} catch (e) {
				no_e_b = false;
			}
		}else no_e_b = false;

		if (no_e_a || no_e_b) {
			if (scale_a > scale_b) {

				m = scale_a;

				for (var int = 0; int < scale_a - scale_b; int++) {
					str_b += "0";
				}
			} else {

				m = scale_b;

				for (var int = 0; int < scale_b - scale_a; int++) {
					str_a += "0";
				}
			}
		}
		
		//Math pow 取 10 的 m 次幂。
		return (Number(str_a.replace(".", "")) - Number(str_b.replace(".", ""))) / Math.pow(10, m);
	}
}

 

转载于:https://my.oschina.net/wliming/blog/1517880

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值