Guest User

Untitled

a guest
Jul 16th, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. extension Int {
  2.  
  3. var relativeCount: String {
  4. return relativeCount(toDigit: 1)
  5. }
  6.  
  7. func relativeCount(toDigit digit: Int) -> String {
  8. // should not round to negative digit, its impossible
  9. guard digit >= 0 else { fatalError() }
  10. // if is negative, just return self
  11. guard self >= 0 else { return "\(self)" }
  12.  
  13. let factor = NSDecimalNumber(decimal: pow(10, digit)).doubleValue
  14.  
  15. switch self {
  16. case 1...999:
  17. return "\(self)"
  18. case 1000...999999:
  19. let number = ((Double(self) / 1000.0) * factor).rounded(.down) / factor
  20. return String(format: "%.\(digit)f", number) + "k"
  21. case 1000000...999999999:
  22. let number = ((Double(self) / 1000000.0) * factor).rounded(.down) / factor
  23. return String(format: "%.\(digit)f", number) + "m"
  24. default:
  25. let number = ((Double(self) / 1000000000.0) * factor).rounded(.down) / factor
  26. return String(format: "%.\(digit)f", number) + "b"
  27. }
  28. }
  29.  
  30. }
  31.  
  32. 21039023.relativeCount // "21.0m"
  33. 7866.relativeCount // "7.8k"
  34. 832832983928923.relativeCount // "832832.9b"
  35.  
  36. (-1).relativeCount(toDigit: 2) // "-1"
  37. (-2189).relativeCount // "-2189"
  38.  
  39. 0.relativeCount(toDigit: 1) // "0"
Add Comment
Please, Sign In to add comment