Reputation: 1278
I have a string, "$4,102.33"
that needs to be converted to double. This will always be US. My only way is a hack to strip out the $
and ,
and then convert to double. Seems like NSFormatter
only lets me convert TO a currency and not from it. Is there a built-in function or better way than just removing the $
and ,
? prior to converting it to double?
Upvotes: 7
Views: 10859
Reputation: 2210
NumberFormatter
can convert to and from string. Also Double
cannot represent certain numbers precisely since it's base-2. Using Decimal
is slower but safer.
let str = "$4,102.33"
let formatter = NumberFormatter()
formatter.numberStyle = .currency
if let number = formatter.number(from: str) {
let amount = number.decimalValue
print(amount)
}
Upvotes: 27
Reputation: 38657
To convert from String to NSNumber for a given currency is easy:
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.locale = Locale(identifier: "en_US")
let number = formatter.number(from: string)
To get your number as a Double or as a Decimal (preferred) is then direct:
let doubleValue = number?.doubleValue
let decimalValue = number?.decimalValue
Upvotes: 5