Formatting number as percentage

Viewed 9456

I don't understand how NSNumberFormatterPercentStyle works!

Example:

NSNumber *number = [NSNumber numberWithFloat:90.5];
NSNumberFormatter *percentageFormatter = [[[NSNumberFormatter alloc] init] autorelease];
[percentageFormatter setNumberStyle:NSNumberFormatterPercentStyle];

NSString *strNumber = [percentageFormatter stringFromNumber:numbericString];
NSLog (strNumber);  // Output: 9,050%

I simply want to show "90.5%" (respecting NSLocal). What is NSNumberFormatterPercentStyle doing with 90.5, and why? And, how can i get my desired result!?

7 Answers

Swift 4/5

Create NSNumber extension just like this

extension NSNumber {
    func getPercentage() -> String {
        let formatter = NumberFormatter()
        formatter.numberStyle = .percent
        formatter.maximumFractionDigits = 0 // You can set what you want
        return formatter.string(from: self)!
    }
}

Get percentage

let confidence = 0.68300 as NSNumber
print(confidence.getPercentage())

Output

68%

My clean solution in Swift:

create extension for NumberFormatter, that you can use wherever you want:

extension NumberFormatter {
    static var percentage: NumberFormatter {
        let numberFormatter = NumberFormatter()
        numberFormatter.numberStyle = .percent
        numberFormatter.maximumFractionDigits = .zero
        return numberFormatter
    }
}

Also, create extension for f.e. Double:

extension Double {
    var percentageValue: String? {
        return NumberFormatter.percentage.string(from: self as NSNumber)
    }
}

Then, using this:

let yourValue = 0.905
let percentageValue = yourValue.percentageValue

Output:

90.5%
Related