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; }
测试: