# 表单输入值注意事项

URL: https://caijiao.org/decimaljs/11-appendix/03-form
Source: docs/decimaljs/11-appendix/03-form.md
Description: 介绍使用 decimal.js 处理表单输入数值时的常见问题及最佳实践，确保数值转换和计算的准确性。

在使用 decimal.js 处理表单输入的数值时，需注意输入格式、类型转换及数据验证，避免因格式错误或类型不匹配导致计算异常。

## 常见问题

- **输入类型不一致**  
  表单通常以字符串形式接收输入，需要转换为 Decimal 实例才能进行准确计算。

- **空字符串或非法输入**  
  空字符串或非数字字符会导致 Decimal 构造失败，抛出异常。

- **浮点数精度问题**  
  直接用原生 Number 转换表单值可能引入浮点误差。

- **国际化数字格式**  
  不同地区小数点和千分位符不同，需统一格式处理。

## 处理建议

### 1. 输入校验

- 使用表单验证规则确保输入合法，如非空、数字格式正确。  
- 禁止输入非法字符，或使用正则表达式过滤。

### 2. 类型转换

- 将输入字符串先清理（去除空格、千分位符），再用 Decimal 构造。  
- 避免先转 Number，再用 Decimal 构造，直接用字符串构造更准确。

```js
import Decimal from 'decimal.js';

function parseInput(value) {
  // 清理输入，如去掉逗号
  const cleanValue = value.replace(/,/g, '').trim();
  if (cleanValue === '') {
    return null; // 或抛错，根据业务需求
  }
  return new Decimal(cleanValue);
}
````

### 3. 空值和异常处理

* 对空输入做特殊处理，防止构造 Decimal 时报错。
* 捕获异常，给用户友好提示。

### 4. 国际化处理

* 统一输入格式，如小数点统一为点号`.`，避免混淆。
* 使用专门库处理本地化数字格式转换。

## 示例

```js
try {
  const userInput = '1,234.56';
  const decimalValue = parseInput(userInput);
  if (decimalValue) {
    console.log(decimalValue.toString()); // "1234.56"
  } else {
    console.log('输入为空或无效');
  }
} catch (e) {
  console.error('输入格式错误:', e.message);
}
```

---

正确处理表单输入值，确保 decimal.js 计算的精度和稳定性，是开发高质量数值应用的关键。
