教程 decimaljs tutorial

加密货币精度处理

加密货币通常涉及极高精度的数值计算,例如支持多达18位小数的代币数量。原生 JavaScript 数值无法满足此需求,decimal.js 是理想选择。

典型场景

计算用户账户余额、交易金额、手续费等,确保不会因浮点误差导致资金异常。

js
import Decimal from 'decimal.js';

// 示例:用户余额和交易金额
const balance = new Decimal('0.123456789123456789');
const transferAmount = new Decimal('0.000000000987654321');

// 计算转账后余额
const newBalance = balance.minus(transferAmount);

// 保持 18 位小数,常见加密货币精度
const finalBalance = newBalance.toDecimalPlaces(18, Decimal.ROUND_DOWN);

console.log(`转账后余额: ${finalBalance.toFixed(18)}`);
// 输出: 转账后余额: 0.123456788135802468

`

重点说明

  • 使用 .minus() 进行高精度减法。
  • 采用 .toDecimalPlaces(18, Decimal.ROUND_DOWN) 确保精度符合加密货币标准,且避免四舍五入产生误差。
  • .toFixed(18) 确保显示格式固定小数位,方便前端展示。

建议

  • 对所有币种余额和金额操作使用 decimal.js 类型。
  • 统一配置精度和舍入模式,避免不同模块产生计算误差。
  • 结合链式调用简化复杂计算。

decimal.js 为加密货币应用提供可靠的高精度数值支持,保障资金安全和数据准确。