package util import ( "fmt" "math" "strconv" "strings" ) // AmountToCents 把 "0.01" / "12.30" 元金额转为分(int64),便于精确比较。 func AmountToCents(s string) (int64, error) { s = strings.TrimSpace(s) if s == "" { return 0, fmt.Errorf("空金额") } f, err := strconv.ParseFloat(s, 64) if err != nil { return 0, fmt.Errorf("金额格式错误 %q: %w", s, err) } if f < 0 { return 0, fmt.Errorf("金额不能为负: %q", s) } return int64(math.Round(f * 100)), nil } // CentsToAmount 把分(int64)转回 "0.01" 元字符串(微信接口用分,本服务统一用元字符串)。 func CentsToAmount(cents int64) string { return strconv.FormatFloat(float64(cents)/100, 'f', 2, 64) } // AmountEqual 判断两个元金额字符串是否等值(按分比较,避免浮点/格式差异)。 func AmountEqual(a, b string) bool { ca, err1 := AmountToCents(a) cb, err2 := AmountToCents(b) return err1 == nil && err2 == nil && ca == cb }