Created
July 16, 2018 15:37
-
-
Save yoxisem544/061a7a2328b4dbb95d42c18ad3f8e461 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment