myesn

myEsn2E9

hi
github

JavaScript 小数计算精度丢失解决方案

原因#

JavaScript 为什么会出现精度问题

解决方案#

推荐使用第三方库如 bignumber.jsdecimal.jsmath.js 来解决 JavaScript 的精度问题。这些库通过重新实现计算逻辑来避免浮点数精度丢失。

  • bignumber.jsdecimal.js 是较为流行的选择,它们都提供了任意精度的十进制数值计算功能。
  • math.js 则是一个更加全面的数学库,除了解决精度问题外,还支持符号计算、矩阵运算等更多功能。

本文代码示例使用 bignumber.js 来实现基本的算术:

// 加法
const accAdd = (arg1, arg2) => {
  return new BigNumber(arg1 ?? 0)
    .plus(new BigNumber(arg2 ?? 0)).toNumber();
}

// 减法
const accSub = (arg1, arg2) => {
  return new BigNumber(arg1 ?? 0)
    .minus(new BigNumber(arg2 ?? 0)).toNumber();
}

// 乘法
const accMul = (arg1, arg2) => {
  return new BigNumber(arg1 ?? 0)
    .times(new BigNumber(arg2 ?? 0)).toNumber();
}

// 除法 
// arg1 被除数; arg2 除数。
// 公式:被除数 / 除数 = 商
const accDiv = (arg1, arg2) => {
  if(args2 === 0) {
    throw new Error('除数不能为 0');
  }
  
  return new BigNumber(arg1 ?? 0)
    .div(new BigNumber(arg2)).toNumber();    
}

参考#

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。