Go | 表示货币的方法
Jul 12, 2025
基准单位选择
货币表示的一个关键问题是选择什么作为基准单位。主流做法有两种:
- 使用最小单位(分、cent等):将货币以最小单位存储为整数
- 例如:¥10.99存储为1099(分),$5.25存储为525(美分)
- 优点:避免浮点数精度问题,计算准确
- 缺点:需要在展示时进行转换
- 使用定点数:通常是使用特定库中的decimal类型
- 例如:使用decimal包存储10.99
整数表示法(推荐)
copy
// 以分为单位表示货币
type Money struct
// 例如:¥10.99表示为:
money := Money
2. 使用专门的decimal库
copy
import "github.com/shopspring/decimal"
type Money struct
// 例如:¥10.99表示为:
amount := decimal.NewFromFloat(10.99)
money := Money
3. 使用货币专用库
有一些Go语言的第三方库专门用于处理货币:
copy
// 使用go-money库
import "github.com/Rhymond/go-money"
// 创建10.99人民币
money := money.New(1099, "CNY")
最佳实践
- 避免使用float类型:浮点数会有精度问题,不适合表示货币
- 推荐使用最小单位的整数:简单、准确、性能好
- 考虑国际化:添加货币代码(CNY、USD等)
- 处理舍入问题:明确定义舍入规则
- 进行单元测试:对所有货币计算进行充分测试
最终,选择以最小货币单位(如分)作为基准单位,并使用整数表示,是Golang中处理货币的最佳实践之一。
- Claude 3.7 Sonnet