Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extension Int {
- var relativeCount: String {
- return relativeCount(toDigit: 1)
- }
- func relativeCount(toDigit digit: Int) -> String {
- // should not round to negative digit, its impossible
- guard digit >= 0 else { fatalError() }
- // if is negative, just return self
- guard self >= 0 else { return "\(self)" }
- let factor = NSDecimalNumber(decimal: pow(10, digit)).doubleValue
- switch self {
- case 1...999:
- return "\(self)"
- case 1000...999999:
- let number = ((Double(self) / 1000.0) * factor).rounded(.down) / factor
- return String(format: "%.\(digit)f", number) + "k"
- case 1000000...999999999:
- let number = ((Double(self) / 1000000.0) * factor).rounded(.down) / factor
- return String(format: "%.\(digit)f", number) + "m"
- default:
- let number = ((Double(self) / 1000000000.0) * factor).rounded(.down) / factor
- return String(format: "%.\(digit)f", number) + "b"
- }
- }
- }
- 21039023.relativeCount // "21.0m"
- 7866.relativeCount // "7.8k"
- 832832983928923.relativeCount // "832832.9b"
- (-1).relativeCount(toDigit: 2) // "-1"
- (-2189).relativeCount // "-2189"
- 0.relativeCount(toDigit: 1) // "0"
Add Comment
Please, Sign In to add comment