Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSNumberFormatter PercentStyle decimal places

I'm using Swift

let myDouble = 8.5 as Double

let percentFormatter            = NSNumberFormatter()
percentFormatter.numberStyle    = NSNumberFormatterStyle.PercentStyle
percentFormatter.multiplier     = 1.00

let myString = percentFormatter.stringFromNumber(myDouble)!

println(myString)

Outputs 8% and not 8.5%, how would I get it to output 8.5%? (But only up to 2 decimal places)

like image 517
Fred Faust Avatar asked May 22 '15 13:05

Fred Faust


3 Answers

To set the number of fraction digits use:

percentFormatter.minimumFractionDigits = 1
percentFormatter.maximumFractionDigits = 1

Set minimum and maximum to your needs. Should be self-explanatory.

like image 72
zisoft Avatar answered Nov 12 '22 01:11

zisoft


With Swift 5, NumberFormatter has an instance property called minimumFractionDigits. minimumFractionDigits has the following declaration:

var minimumFractionDigits: Int { get set }

The minimum number of digits after the decimal separator allowed as input and output by the receiver.


NumberFormatter also has an instance property called maximumFractionDigits. maximumFractionDigits has the following declaration:

var maximumFractionDigits: Int { get set }

The maximum number of digits after the decimal separator allowed as input and output by the receiver.


The following Playground code shows how to use minimumFractionDigits and maximumFractionDigits in order to set the number of digits after the decimal separator when using NumberFormatter:

import Foundation

let percentFormatter = NumberFormatter()
percentFormatter.numberStyle = NumberFormatter.Style.percent
percentFormatter.multiplier = 1
percentFormatter.minimumFractionDigits = 1
percentFormatter.maximumFractionDigits = 2

let myDouble1: Double = 8
let myString1 = percentFormatter.string(for: myDouble1)
print(String(describing: myString1)) // Optional("8.0%")

let myDouble2 = 8.5
let myString2 = percentFormatter.string(for: myDouble2)
print(String(describing: myString2)) // Optional("8.5%")

let myDouble3 = 8.5786
let myString3 = percentFormatter.string(for: myDouble3)
print(String(describing: myString3)) // Optional("8.58%")
like image 22
Imanou Petit Avatar answered Nov 12 '22 01:11

Imanou Petit


When in doubt, look in apple documentation for minimum fraction digits and maximum fraction digits which will give you these lines you have to add before formatting your number:

numberFormatter.minimumFractionDigits = 1
numberFormatter.maximumFractionDigits = 2

Also notice, your input has to be 0.085 to get 8.5%. This is caused by the multiplier property, which is for percent style set to 100 by default.

like image 40
gbread Avatar answered Nov 12 '22 01:11

gbread