Skip to content

Instantly share code, notes, and snippets.

@yoxisem544
Created July 16, 2018 15:37
Show Gist options
  • Save yoxisem544/061a7a2328b4dbb95d42c18ad3f8e461 to your computer and use it in GitHub Desktop.
Save yoxisem544/061a7a2328b4dbb95d42c18ad3f8e461 to your computer and use it in GitHub Desktop.
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