123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package common
- import (
- "math"
- "strconv"
- "strings"
- )
- func MoneyNegation(s string) string {
- switch {
- case s == "":
- return s
- case s[0] == '-':
- return s[1:]
- default:
- return "-" + s
- }
- }
- 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
- }
- func normalizeAmount(amount string) string {
-
- return strings.ReplaceAll(strings.TrimSpace(amount), ",", "")
- }
- func MoneyNormalize(s string) string {
- return strings.ReplaceAll(s, ",", "")
- }
- func MoneyAdd(a, b string) string {
-
- var n int
- if len(a) > len(b) {
- n = len(a)
- } else {
- n = len(b)
- }
-
-
-
-
-
- bs := make([]byte, n+1)
- var carry byte
- for i := 1; i <= n; i++ {
-
- if i == 3 {
- bs[n-i+1] = '.'
- continue
- }
-
- c := byteOf(a, i) + byteOf(b, i) + carry
- if c >= 10 {
- carry = 1
- c -= 10
- } else {
- carry = 0
- }
- bs[n-i+1] = c + '0'
- }
- if carry != 0 {
- bs[0] = '1'
- return string(bs)
- }
- return string(bs[1:])
- }
- func byteOf(s string, i int) byte {
- if len(s) < i {
- return 0
- }
- return s[len(s)-i] - '0'
- }
|