package common import ( "math" "strconv" "strings" ) // MoneyNegation 金额取反 负负得正 func MoneyNegation(s string) string { switch { case s == "": return s case s[0] == '-': return s[1:] default: return "-" + s } } // IsAmountEqual 判断两个金额字符串是否相等 func IsAmountEqual(amount1, amount2 string) bool { // 规范化金额字符串 normalizedAmount1 := normalizeAmount(amount1) normalizedAmount2 := normalizeAmount(amount2) if normalizedAmount1 == "" { normalizedAmount1 = "0" } if normalizedAmount2 == "" { normalizedAmount2 = "0" } // 转换为浮点数进行比较 value1, err1 := strconv.ParseFloat(normalizedAmount1, 64) value2, err2 := strconv.ParseFloat(normalizedAmount2, 64) // 如果任意一个转换失败,则认为不相等 if err1 != nil || err2 != nil { return false } // 比较浮点数 return math.Abs(value2-value1) < 0.0001 } // normalizeAmount 规范化金额字符串 func normalizeAmount(amount string) string { // 去掉逗号和多余的空格 return strings.ReplaceAll(strings.TrimSpace(amount), ",", "") } // MoneyNormalize 金额标准化 "1,234.56" -> "1234.56" func MoneyNormalize(s string) string { return strings.ReplaceAll(s, ",", "") }