关于javascript数值比较大小(主要针对大于16位的数值)

1.方法

/**
 * 背景:js最大值是16位数(大于16位数的无法比较)
 * 方法:数值大小比较(小于等于) -- 支持超过16位数(切记数值超过16位数一定要传字符串的数值,传number的数值会被系统转换,导致对比不了)
 * @param num{string}: 要比较的数
 * @param max{string}: 目标数
 * @return boolean
 **/
export function numberCompareIsLessThan(num, max) {
    //是小于等于
    let bool = true;

    //校验”要比较的数“是不是一个数字,”要比较的数“一般是用户输入的,如果没有校验旧传入有可能不是数字,max是代码写的
    let reg = /^(([0-9])|([1-9][0-9]*))(\.[0-9]+)?$/;
    if(!reg.test(num)){
        console.log('calcNumberIsLessThan-要比较的数不是一个数字:',num)
        bool = false;
        return bool;
    }

    num = num?num.toString():'';
    max = max?max.toString():'';

    //可能有小数
    let numList = num.split(".");
    let maxList = max.split(".");

    //取”要比较的数“的int数值和小数数值
    let numInt = numList[0]?numList[0]:'';
    let numFloat = numList[1]?numList[1]:'';

    //取”目标数“的int数值和小数数值
    let maxInt = maxList[0]?maxList[0]:'';
    let maxFloat = maxList[1]?maxList[1]:'';

    //比较int长度
    if(numInt.length > maxInt.length) {
        bool = false;
    }

    if(numInt.length === maxInt.length) {
        //int数值进行比较
        for(let i = 0;i < maxInt.length; i++) {
            let diff = (numInt[i]?numInt[i]:0) - (maxInt[i]?maxInt[i]:0);
            if(diff > 0) {
                bool = false;
                break;
            }
        }
    }

    //如果前面int类型没有判断处理,判断小数点数值
    if(bool){
        let floatLength = Math.max(numFloat.length, maxFloat.length);
        for(let j = 0;j < floatLength; j++) {
            let diff = (numFloat[j]?numFloat[j]:0) - (maxFloat[j]?maxFloat[j]:0);
            if(diff > 0) {
                bool = false;
                break;
            }
        }
    }

    return bool;
}

2.调用测试

//传字符串类型的数值过去
numberCompareIsLessThan("2231221","9223372036854775808")

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值