mathUtils.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package utils
  2. import (
  3. "math"
  4. "math/big"
  5. "sort"
  6. "strconv"
  7. "github.com/shopspring/decimal"
  8. )
  9. // FormatFloat 保留指定小数位并返回字符串
  10. func FormatFloat(num float64, decimal int) string {
  11. // 默认乘1
  12. d := float64(1)
  13. if decimal > 0 {
  14. // 10的N次方
  15. d = math.Pow10(decimal)
  16. }
  17. // math.trunc作用就是返回浮点数的整数部分
  18. // 再除回去,小数点后无效的0也就不存在了
  19. return strconv.FormatFloat(math.Trunc(num*d)/d, 'f', -1, 64)
  20. }
  21. // SortInIntSlice 判断int是否包含于数组中
  22. func SortInIntSlice(haystack []int, needle int) bool {
  23. sort.Ints(haystack)
  24. index := sort.SearchInts(haystack, needle)
  25. return index < len(haystack) && haystack[index] == needle
  26. }
  27. // IntToFloat64 IntToFloat64 高精度转
  28. func IntToFloat64(value int, decimal int) float64 {
  29. if value == 0 {
  30. return 0
  31. }
  32. numrator, _ := new(big.Float).SetPrec(uint(1024)).SetString(strconv.Itoa(value))
  33. denominator := big.NewFloat(math.Pow10(decimal))
  34. denominator1 := numrator.Quo(numrator, denominator)
  35. rst, _ := denominator1.Float64()
  36. return rst
  37. }
  38. func Float64Round(f float64, place int) float64 {
  39. v, _ := decimal.NewFromFloat(f).Round(int32(place)).Float64()
  40. return v
  41. }