# 加密货币精度处理

URL: https://caijiao.org/decimaljs/10-cases/03-crypto
Source: docs/decimaljs/10-cases/03-crypto.md
Description: 介绍如何使用 decimal.js 处理加密货币中高精度的金额计算，避免浮点误差，确保交易和余额的准确性。

加密货币通常涉及极高精度的数值计算，例如支持多达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 为加密货币应用提供可靠的高精度数值支持，保障资金安全和数据准确。
