How to format a Double into Currency - Swift 3 How to format a Double into Currency - Swift 3 ios ios

How to format a Double into Currency - Swift 3


You can use this string initializer if you want to force the currency to $:

String(format: "Tip Amount: $%.02f", tipAmount)

If you want it to be fully dependent on the locale settings of the device, you should use a NumberFormatter. This will take into account the number of decimal places for the currency as well as positioning the currency symbol correctly. E.g. the double value 2.4 will return "2,40 €" for the es_ES locale and "¥ 2" for the jp_JP locale.

let formatter = NumberFormatter()formatter.locale = Locale.current // Change this to another locale if you want to force a specific locale, otherwise this is redundant as the current locale is the default alreadyformatter.numberStyle = .currencyif let formattedTipAmount = formatter.string(from: tipAmount as NSNumber) {    tipAmountLabel.text = "Tip Amount: \(formattedTipAmount)"}


How to do it in Swift 4:

let myDouble = 9999.99let currencyFormatter = NumberFormatter()currencyFormatter.usesGroupingSeparator = truecurrencyFormatter.numberStyle = .currency// localize to your grouping and decimal separatorcurrencyFormatter.locale = Locale.current// We'll force unwrap with the !, if you've got defined data you may need more error checkinglet priceString = currencyFormatter.string(from: NSNumber(value: myDouble))!print(priceString) // Displays $9,999.99 in the US locale


You can to convert like that: this func convert keep for you maximumFractionDigits whenever you want to do

static func df2so(_ price: Double) -> String{        let numberFormatter = NumberFormatter()        numberFormatter.groupingSeparator = ","        numberFormatter.groupingSize = 3        numberFormatter.usesGroupingSeparator = true        numberFormatter.decimalSeparator = "."        numberFormatter.numberStyle = .decimal        numberFormatter.maximumFractionDigits = 2        return numberFormatter.string(from: price as NSNumber)!    } 

i create it in class Model then when you call , you can accecpt it another class , like this

 print("InitData: result convert string " + Model.df2so(1008977.72))//InitData: result convert string "1,008,977.72"