大于安全整数的运算该怎么办呢?

335 阅读2分钟

什么是最大安全整数

MAX_SAFE_INTEGER是一个值为9007199254740991的常量,我们知道js中存储数据都采用的是双精度的double型来存储,而这一数据类型能够安全存储 -(253 - 1) 到 253 - 1 之间的数值(包含边界值);

项目中的问题

在项目中我们输出比最大安全整数大的值

console.log(9007199254740999) // 9007199254741000
console.log(9007199254740997)  // 9007199254740996

那么在我们的项目中如果出现项目数字金额较大,需要计算相加的数字之和时怎么办?

像我们普通的数字直接使用+号就可以相加,但是对于最大安全整数的相加,应该怎么办呢?

解决办法

针对这种方式的运算解决办法好就是转换为字符串来操作,以防止造成其精度问题造成的运算问题

举个栗子 : 定义两个字符串:

a = '9007199254740991'
b = '9007199254740978566'
function add(a,b){
}

接下来就是正题的计算了,希望有一天可以在项目中帮到你

let a ='9007199254740991'
let b = '9007199254740978566'
function add(a,b){
 // 取两个数字中最大的数字
 let maxlength = Math.max(a.length, b.length)
 // 将a ,b 的高位采用0补齐
 a = a.padStart(maxlength, 0)
 b = b.padStart(maxlength,0)
 //定义运算中所需要的变量
 let t = 0
 let f= 0 // 表示进位
 let sum = '' // 用来做数据拼接
 for(var i = maxlength -1 ; i>0; i--){
    t= parseInt(a[i])+parseInt(b[i])+f
    f= Math.floor(t/10)
    sum = t%10 +sum
 }
   if(f === 1){
    sum = '1'+sum
  }
  return sum
 
}