# 舍入模式详解

URL: https://caijiao.org/decimaljs/07-config/02-rounding-modes
Source: docs/decimaljs/07-config/02-rounding-modes.md
Description: 介绍 decimal.js 中多种舍入模式的含义与使用场景，帮助开发者选择合适的舍入策略，实现精确数值计算。

decimal.js 提供多种舍入模式，用于控制数值运算结果的舍入行为，满足不同业务需求。

## 舍入模式枚举及含义

| 模式值 | 舍入方式             | 说明                          |
|--------|----------------------|-------------------------------|
| 0      | 向零舍入（截断）     | 直接截断小数部分，向零方向舍入 |
| 1      | 向下舍入（地板舍入） | 向负无穷方向舍入               |
| 2      | 向上舍入（天花板）   | 向正无穷方向舍入               |
| 3      | 四舍五入（默认）     | 四舍五入，0.5 向上舍入         |
| 4      | 银行家舍入（四舍六入） | 四舍五入到最近的偶数           |

## 设置舍入模式

通过 `Decimal.set()` 全局设置舍入模式：

```js
import Decimal from 'decimal.js';

// 设置为银行家舍入模式
Decimal.set({ rounding: 4 });
````

也可以在调用 `.toDecimalPlaces()` 等方法时单独指定舍入模式：

```js
const a = new Decimal('1.345');

// 使用银行家舍入，保留两位小数
console.log(a.toDecimalPlaces(2, 4).toString()); // 输出 "1.34"
```

## 使用示例说明

```js
const num1 = new Decimal('1.555');
const num2 = new Decimal('1.555');

Decimal.set({ rounding: 1 }); // 向下舍入
console.log(num1.toDecimalPlaces(2).toString()); // "1.55"

Decimal.set({ rounding: 3 }); // 四舍五入
console.log(num2.toDecimalPlaces(2).toString()); // "1.56"
```

## 选择建议

* 对财务计算，通常选择银行家舍入（4）避免累计偏差。
* 简单截断可用模式 0，适合某些技术计算场景。
* 根据业务需求灵活设置。

---

掌握舍入模式配置，能有效避免运算误差，保证数值结果的准确性和业务一致性。
