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 }