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.34 元 -> 1234 分 func ToCent(yuan float64) int64 { return int64(math.Round(yuan * 100)) } // ToDisplayYuan 将分转换为按角精度展示的元值。 // 1234 分 -> 12.3 元 func ToDisplayYuan(cent int64) float64 { return Round(float64(cent) / 100) } // Format 格式化分为字符串(角精度,保留1位小数) // 1234 分 -> "12.3" // 1230 分 -> "12.3" func Format(cent int64) string { return fmt.Sprintf("%.1f", ToDisplayYuan(cent)) } // 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 }