js超长string转number 精度丢失问题 ??

let num = '7236576431060140064'
console.log(+num, Number(num)) // 7236576431060140000
最后两位数丢了 这应该怎么处理
阅读 5.1k
3 个回答

BigInt

let num_str = '7236576431060140064'
let num = BigInt(num_str)    // 7236576431060140064n

用bignumber.js或decimal.js

let BigNumber = require('bignumber.js');

let num = new BigNumber('7236576431060140064');
console.log(num.toString()); // "7236576431060140064"

或者:

let num = BigInt('7236576431060140064');
console.log(num.toString()); // "7236576431060140064"

JS中的 Number 类型只能存储数值在 -253-1 ~ 253-1 之间的数据:

const biggestInt = Number.MAX_SAFE_INTEGER; // (2**53 - 1) => 9007199254740991
const smallestInt = Number.MIN_SAFE_INTEGER; // -(2**53 - 1) => -9007199254740991

使用 BigInt() 来替代 Number()就行。但 BigIntES2020 的内容,所以如果考虑兼容问题的话,最好使用大数运算的第三方库来处理,比如说:big.jsnpm install big.js),因为你需要转换为数值类型的多半也需要运算。

如果不涉及运算直接用字符串就好了。


相关阅读
BigInt - JavaScript | MDN
Number - JavaScript | MDN
MikeMcl/big.js: A small, fast JavaScript library for arbitrary-precision decimal arithmetic.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题