amount.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package common
  2. import (
  3. "math"
  4. "strconv"
  5. "strings"
  6. )
  7. // MoneyNegation 金额取反 负负得正
  8. func MoneyNegation(s string) string {
  9. switch {
  10. case s == "":
  11. return s
  12. case s[0] == '-':
  13. return s[1:]
  14. default:
  15. return "-" + s
  16. }
  17. }
  18. // IsAmountEqual 判断两个金额字符串是否相等
  19. func IsAmountEqual(amount1, amount2 string) bool {
  20. // 规范化金额字符串
  21. normalizedAmount1 := normalizeAmount(amount1)
  22. normalizedAmount2 := normalizeAmount(amount2)
  23. if normalizedAmount1 == "" {
  24. normalizedAmount1 = "0"
  25. }
  26. if normalizedAmount2 == "" {
  27. normalizedAmount2 = "0"
  28. }
  29. // 转换为浮点数进行比较
  30. value1, err1 := strconv.ParseFloat(normalizedAmount1, 64)
  31. value2, err2 := strconv.ParseFloat(normalizedAmount2, 64)
  32. // 如果任意一个转换失败,则认为不相等
  33. if err1 != nil || err2 != nil {
  34. return false
  35. }
  36. // 比较浮点数
  37. return math.Abs(value2-value1) < 0.0001
  38. }
  39. // normalizeAmount 规范化金额字符串
  40. func normalizeAmount(amount string) string {
  41. // 去掉逗号和多余的空格
  42. return strings.ReplaceAll(strings.TrimSpace(amount), ",", "")
  43. }
  44. // MoneyNormalize 金额标准化 "1,234.56" -> "1234.56"
  45. func MoneyNormalize(s string) string {
  46. return strings.ReplaceAll(s, ",", "")
  47. }