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?
NumberFormatter
can convert to and from string. Also Double
cannot represent certain numbers exactly since it's based 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)
}
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With