最近在项目开发过程中发现,由于小伙伴的代码逻辑不够严谨,导致用户输入超长数字报错的严重失误,也让我意识到,虽然我认为这种低级错误不应该出现,但也是我们容易忽视的问题。
在JavaScript中,Number类型的最大数值表示为Number.MAX_VALUE。当超过这个数值后再进行数学运算时可能会出现Infinity或者失去精度的结果。
console.log(Number.MAX_VALUE) // 输出1.7976931348623157e+308
数据来源
- 用户输入
- 后端返回
- 大数据计算得到
处理方案
- 表单校验,设置maxlength
- 使用第三方库,比如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