format.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package format
  2. import (
  3. "fmt"
  4. "math"
  5. )
  6. const (
  7. Thousand = 1000
  8. Million = Thousand * 1000
  9. Billion = Million * 1000
  10. Trillion = Billion * 1000
  11. )
  12. func RoundedParameter(b uint64) string {
  13. switch {
  14. case b >= Billion:
  15. number := float64(b) / Billion
  16. if number == math.Floor(number) {
  17. return fmt.Sprintf("%.0fB", number) // no decimals if whole number
  18. }
  19. return fmt.Sprintf("%.1fB", number) // one decimal if not a whole number
  20. case b >= Million:
  21. number := float64(b) / Million
  22. if number == math.Floor(number) {
  23. return fmt.Sprintf("%.0fM", number) // no decimals if whole number
  24. }
  25. return fmt.Sprintf("%.2fM", number) // two decimals if not a whole number
  26. case b >= Thousand:
  27. return fmt.Sprintf("%.0fK", float64(b)/Thousand)
  28. default:
  29. return fmt.Sprintf("%d", b)
  30. }
  31. }
  32. func Parameters(b uint64) string {
  33. switch {
  34. case b >= Trillion:
  35. number := float64(b) / Trillion
  36. return fmt.Sprintf("%sT", decimalPlace(number))
  37. case b >= Billion:
  38. number := float64(b) / Billion
  39. return fmt.Sprintf("%sB", decimalPlace(number))
  40. case b >= Million:
  41. number := float64(b) / Million
  42. return fmt.Sprintf("%sM", decimalPlace(number))
  43. case b >= Thousand:
  44. number := float64(b) / Thousand
  45. return fmt.Sprintf("%sK", decimalPlace(number))
  46. default:
  47. return fmt.Sprintf("%d", b)
  48. }
  49. }
  50. func decimalPlace(number float64) string {
  51. switch {
  52. case number >= 100:
  53. return fmt.Sprintf("%.0f", number)
  54. case number >= 10:
  55. return fmt.Sprintf("%.1f", number)
  56. default:
  57. return fmt.Sprintf("%.2f", number)
  58. }
  59. }