Files
hfb_sys/backend/pkg/money/format.go
T
ymlandClaude Opus 4.8 e2780ffb86 Money工具包:实现分↔角转换和格式化函数
核心函数:
- ToCent(jiao) -> cent:将角转换为分(存储)
- ToJiao(cent) -> jiao:将分转换为角(展示)
- Format(cent) -> string:格式化分为角字符串
- FormatWithSymbol(cent) -> string:格式化为带¥符号的字符串

兼容性:
- 保留 Min/Max(float64) 用于兼容旧代码
- 新增 MinCent/MaxCent(int64) 用于分计算

测试覆盖:
- 双向转换精度测试
- 边界值测试
- 格式化输出测试

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 13:34:09 +08:00

73 lines
1.5 KiB
Go

package money
import (
"fmt"
"math"
)
// Round 将金额四舍五入到角(0.1元),统一全项目金额精度
// 例如:12.34 -> 12.3, 12.36 -> 12.4, 12.35 -> 12.4
func Round(value float64) float64 {
return math.Round(value*10) / 10
}
// ToCent 将角转换为分(整数),用于存储
// 12.3角 -> 123分
// 12.34角 -> 123分(自动舍入到角)
func ToCent(jiao float64) int64 {
return int64(math.Round(jiao * 10))
}
// ToJiao 将分转换为角(0.1元精度),用于API响应
// 123分 -> 12.3角
// 1234分 -> 123.4角
func ToJiao(cent int64) float64 {
return float64(cent) / 10.0
}
// Format 格式化分为字符串(角精度,保留1位小数)
// 123分 -> "12.3"
// 1230分 -> "123.0"
func Format(cent int64) string {
jiao := ToJiao(cent)
return fmt.Sprintf("%.1f", jiao)
}
// FormatWithSymbol 格式化分为带符号的字符串
// 123分 -> "¥12.3"
func FormatWithSymbol(cent int64) string {
return "¥" + Format(cent)
}
// Min 返回两个金额中较小的值(角精度,兼容旧代码)
func Min(a, b float64) float64 {
if a < b {
return Round(a)
}
return Round(b)
}
// Max 返回两个金额中较大的值(角精度,兼容旧代码)
func Max(a, b float64) float64 {
if a > b {
return Round(a)
}
return Round(b)
}
// MinCent 返回两个分值中较小的值
func MinCent(a, b int64) int64 {
if a < b {
return a
}
return b
}
// MaxCent 返回两个分值中较大的值
func MaxCent(a, b int64) int64 {
if a > b {
return a
}
return b
}