# 精度不一致的问题排查

URL: https://caijiao.org/decimaljs/11-appendix/01-faq
Source: docs/decimaljs/11-appendix/01-faq.md
Description: 介绍常见的 decimal.js 精度不一致问题及排查方法，帮助开发者快速定位和解决计算误差。

在使用 decimal.js 进行高精度计算时，可能遇到精度表现不一致的情况。了解常见原因与排查方法，有助于保证计算结果准确。

## 常见原因

1. **全局配置不统一**  
   多处代码设置不同的 `precision` 或 `rounding`，导致计算精度差异。

2. **不同类型输入混用**  
   使用原生 `Number` 和 `Decimal` 直接混合运算，可能带入浮点误差。

3. **链式调用中间舍入**  
   过早或多次调用舍入方法导致误差累计。

4. **转换为字符串或数字时误差**  
   非必要时将 Decimal 转为 `Number` 或字符串再参与运算。

## 排查步骤

- **确认全局配置**  
  查看代码中是否多处调用 `Decimal.set()`，保持配置一致。

- **统一输入类型**  
  保证所有数值操作均使用 Decimal 实例，避免混合使用。

- **合理使用舍入**  
  仅在最终显示或关键步骤做舍入，减少中间舍入操作。

- **检查数据来源**  
  确认输入数据格式，避免因不规范字符串导致解析误差。

## 示例

```js
import Decimal from 'decimal.js';

// 全局配置示例
Decimal.set({ precision: 20, rounding: Decimal.ROUND_HALF_UP });

// 正确做法：所有输入均转为 Decimal
const a = new Decimal('0.1');
const b = new Decimal(0.2);

const sum = a.plus(b); // 精确 0.3
console.log(sum.toString()); // 输出 '0.3'
````

## 建议

* 代码中尽量统一数值类型为 Decimal。
* 使用单一全局配置管理精度和舍入。
* 复查业务逻辑中是否存在强制类型转换。

---

通过规范使用 decimal.js 及合理配置，能有效避免精度不一致问题，保证计算结果的可靠性。
