JS判断两个数(包含小数)是否能够整除

   JS判断两个整数(a,b,a>b)的整除时,可以用Number.isInteger(a/b)或者a%b==0来进行判断,但是如果其中涉及到小数就会导致计算过程中精度丢失.

最简单的精度丢失例子,如0.1+0.2==0.3(false).

相同的道理,a%b==0判断并不可取,如11%1.1=1.0999999999999992.则11%1.1==0为false.

同样的Number.isInteger(a/b)判断也不可取,如0.3/0.1=2.9999999999999996,则Number.isInteger(0.3/0.1)为false.

所以为了避免精度丢失,计算结果不正确,可以采用先转化为整数计算.下面提供两种方法,但本质上是一种

第一种方法,编写两个方法getIntegerTimes(),isPositiveIntegerTimes()判断两个数(包含小数),先获取倍数,再判断倍数是否为正整数,好处就是两个方法都可以作为通用方法调用.实现功能多.

//获取两个数的倍数,返回倍数
function getIntegerTimes(arg1,arg2){
	if(arg1<arg2){
		var flag=arg1;
		arg1=arg2;
		arg2=arg1;
	}
	
	var t1=0,t2=0,r1,r2;
	try{t1=arg1.toString().split(".")[1].length}catch(e){}
	try{t2=arg2.toString().split(".")[1].length}catch(e){}
	with(Math){
		r1=Number(arg1.toString().replace(".",""));
		r2=Number(arg2.toString().replace(".",""));
		return (r1/r2)*pow(10,t2-t1);
	}
}

//判断是否为正整数,返回true或false
function isPositiveIntegerTimes(arg) {
	var num = arg.toString();
	if (!(/(^[1-9]\d*$)/.test(num))) {
		return false;
	}
	else {
		return true;
	}
}
第二种方法,就是单一方法isPositiveIntegerTimes(),判断两个数(包含小数)是否整除

//判断两个数的是否为整数倍,返回true或者false
function isPositiveIntegerTimes(arg1,arg2){
	if(arg1<arg2){
		var flag=arg1;
		arg1=arg2;
		arg2=arg1;
	}
	var t1=0,t2=0,r1,r2;
	try{t1=arg1.toString().split(".")[1].length}catch(e){}
	try{t2=arg2.toString().split(".")[1].length}catch(e){}
	with(Math){
		r1=Number(arg1.toString().replace(".",""));
		r2=Number(arg2.toString().replace(".",""));
		var times= (r1/r2)*pow(10,t2-t1);

		if (!(/(^[1-9]\d*$)/.test(times.toString()))) {
			return false;
		}
		else {
			return true;
		}
	}
}




  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值