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"