Swift 2.0 Format 1000's into a friendly K's Swift 2.0 Format 1000's into a friendly K's ios ios

Swift 2.0 Format 1000's into a friendly K's


extension Int {    var roundedWithAbbreviations: String {        let number = Double(self)        let thousand = number / 1000        let million = number / 1000000        if million >= 1.0 {            return "\(round(million*10)/10)M"        }        else if thousand >= 1.0 {            return "\(round(thousand*10)/10)K"        }        else {            return "\(self)"        }    }}print(11.roundedWithAbbreviations)          // "11"print(11111.roundedWithAbbreviations)       // "11.1K"print(11111111.roundedWithAbbreviations)    // "11.1 M"


func formatPoints(num: Double) ->String{    let thousandNum = num/1000    let millionNum = num/1000000    if num >= 1000 && num < 1000000{        if(floor(thousandNum) == thousandNum){            return("\(Int(thousandNum))k")        }        return("\(thousandNum.roundToPlaces(1))k")    }    if num > 1000000{        if(floor(millionNum) == millionNum){            return("\(Int(thousandNum))k")        }        return ("\(millionNum.roundToPlaces(1))M")    }    else{        if(floor(num) == num){            return ("\(Int(num))")        }        return ("\(num)")    }}extension Double {    /// Rounds the double to decimal places value    func roundToPlaces(places:Int) -> Double {        let divisor = pow(10.0, Double(places))        return round(self * divisor) / divisor    }}

The updated code should now not return a .0 if the number is whole. Should now output 1k instead of 1.0k for example. I just checked essentially if double and its floor were the same.

I found the double extension in this question:Rounding a double value to x number of decimal places in swift


The extension below does the following-

  1. Will display number 10456 as 10.5k and 10006 as 10k (will not show the .0 decimals).
  2. Will do the exact above for millions and format it i.e. 10.5M and 10M
  3. Will format thousands upto 9999 in currency format i.e. with a comma like 9,999

    extension Double {    var kmFormatted: String {        if self >= 10000, self <= 999999 {            return String(format: "%.1fK", locale: Locale.current,self/1000).replacingOccurrences(of: ".0", with: "")        }        if self > 999999 {            return String(format: "%.1fM", locale: Locale.current,self/1000000).replacingOccurrences(of: ".0", with: "")        }        return String(format: "%.0f", locale: Locale.current,self)    }}

Usage:

let num: Double = 1000001.00 //this should be a Double since the extension is on Doublelet millionStr = num.kmFormattedprint(millionStr)

Prints 1M

And here it is in action-

enter image description here