在 js中Number类型超过最大值时应该怎么处理?

0 阅读1分钟

最近在项目开发过程中发现,由于小伙伴的代码逻辑不够严谨,导致用户输入超长数字报错的严重失误,也让我意识到,虽然我认为这种低级错误不应该出现,但也是我们容易忽视的问题。

在JavaScript中,Number类型的最大数值表示为Number.MAX_VALUE。当超过这个数值后再进行数学运算时可能会出现Infinity或者失去精度的结果。

console.log(Number.MAX_VALUE) // 输出1.7976931348623157e+308

数据来源

  1. 用户输入
  2. 后端返回
  3. 大数据计算得到

处理方案

  1. 表单校验,设置maxlength
  2. 使用第三方库,比如decimal.js或者big.js:

decimal.js

const Decimal = require('decimal.js');

// 创建一个Decimal对象
const bigNumber = new Decimal('123456789012345678901234567890');

console.log(bigNumber.toString()); // 输出完整的数字

big.js

const Big = require('big.js');
const bigNumber = new Big('123456789012345678901234567890');
console.log(bigNumber); // 输出:123456789012345678901234567890