github.com/webx-top/com@v1.2.12/decimal.go (about) 1 package com 2 3 import ( 4 "fmt" 5 "math" 6 "strings" 7 ) 8 9 func Float2int(v interface{}) int { 10 s := fmt.Sprintf("%v", v) 11 i := strings.SplitN(s, `.`, 2)[0] 12 return Int(i) 13 } 14 15 func Float2uint(v interface{}) uint { 16 s := fmt.Sprintf("%v", v) 17 i := strings.SplitN(s, `.`, 2)[0] 18 return Uint(i) 19 } 20 21 func Float2int64(v interface{}) int64 { 22 s := fmt.Sprintf("%v", v) 23 i := strings.SplitN(s, `.`, 2)[0] 24 return Int64(i) 25 } 26 27 func Float2uint64(v interface{}) uint64 { 28 s := fmt.Sprintf("%v", v) 29 i := strings.SplitN(s, `.`, 2)[0] 30 return Uint64(i) 31 } 32 33 func NumberTrim(number string, precision int, separator ...string) string { 34 s := number 35 if len(s) == 0 { 36 if precision <= 0 { 37 return `0` 38 } 39 return `0.` + strings.Repeat(`0`, precision) 40 } 41 p := strings.LastIndex(s, `.`) 42 if p < 0 { 43 if precision > 0 { 44 s += `.` + strings.Repeat(`0`, precision) 45 } 46 return numberWithSeparator(s, separator...) 47 } 48 if precision <= 0 { 49 return numberWithSeparator(s[0:p], separator...) 50 } 51 r := s[p+1:] 52 if len(r) >= precision { 53 return numberWithSeparator(s[0:p]+`.`+r[0:precision], separator...) 54 } 55 return numberWithSeparator(s, separator...) 56 } 57 58 func NumberTrimZero(number string) string { 59 p := strings.LastIndex(number, `.`) 60 if p < 0 { 61 return number 62 } 63 d := strings.TrimRight(number[p+1:], `0`) 64 if len(d) == 0 { 65 return number[0:p] 66 } 67 return number[0:p] + `.` + d 68 } 69 70 func numberWithSeparator(r string, separator ...string) string { 71 d := `,` 72 if len(separator) > 0 { 73 d = separator[0] 74 if len(d) == 0 { 75 return r 76 } 77 } 78 p := strings.LastIndex(r, `.`) 79 var ( 80 i int 81 v string 82 ) 83 size := len(r) 84 if p <= 0 { 85 i = size 86 } else { 87 i = p 88 v = r[i:] 89 } 90 j := int(math.Ceil(float64(i) / float64(3))) 91 s := make([]string, j) 92 for i > 0 && j > 0 { 93 j-- 94 start := i - 3 95 if start < 0 { 96 start = 0 97 } 98 s[j] = r[start:i] 99 i = start 100 } 101 return strings.Join(s, d) + v 102 } 103 104 func NumberFormat(number interface{}, precision int, separator ...string) string { 105 r := fmt.Sprintf(`%.*f`, precision, Float64(number)) 106 return numberWithSeparator(r, separator...) 107 }