js 超级大数比较大小 (位数超过16位)

javascript中比如int类型数值最大有效精度位数是16位,超过16位时就会四舍五入到前16位的精度,所以大于16位数字是无法比较大小的,故而只能封装独立的比较方法:

/**
* 数值大小比较(小于等于) -- 支持超过16位数
* @param min{string}: 要比较的数
* @param max{string}: 目标数
**/
function isLessThan(min, max) {
    var max = (max + '').replace(/^[\s0]*/,''), // 删除前面的空格和0,提取有效数值
        num = (min + '').replace(/^[\s0]*/,''),
        bool = true,
        list = [];

    if(num.length > max.length || isNaN(num)) {
        bool = false;
    }

    if(num.length == max.length) {
        for(var i = 0;i < max.length; i++) {
            var isBig = max[i] - num[i] >= 0;
            
            list.push(max[i] - num[i] > 0);// 记录各个位置数值是否存在小于的情况

            if(!isBig) {
                // 但出现当前位置数值大于时,判断是否存在高位置数小于的情况
                var some = list.filter(function(item){ return item == true;});
                
                if(some.length == 0) {
                    bool = false;
                    break;
                }
            }
        }
    }

    return bool;
}

 

测试:

 

posted @ 2022-05-13 17:49  【云】风过无痕  阅读(1329)  评论(0编辑  收藏  举报