May 21, 2015

Swift: Converting String to Double

Converting a string to double is easy in Swift.

(swiftString as NSString).doubleValue

does the trick.

The following example just works fine
Screen-Shot-2015-05-21-at-14-55-11

But if you are using a *’thousand separator’ in your string, things are getting messy …
Screen-Shot-2015-05-21-at-14-55-24

Or if you are using a comma instead of a dot as the decimal separator you have no luck either …
Screen-Shot-2015-05-21-at-14-55-47

Depending on the regional settings your users are running your application in, they might have the US notation for decimals (1,234,567.91) or the European one (1.234,567,91).

In this case you can use the following function to simplify the conversion:

func convertLocalizedStringToDouble (decimalAsString: String, thousandSeparator: Bool) -> Double {

  var formatter = NSNumberFormatter()

  formatter.usesGroupingSeparator = thousandSeparator
  formatter.locale = NSLocale.currentLocale()

  var decimalAsDouble = formatter.numberFromString(decimalAsString)?.doubleValue

  // The below should never happen! Only happens, if string equals "1,00034.00", so wrong placement of thousand separator
  if decimalAsDouble == nil { decimalAsDouble = 0} // returning an "Err-Code of 0"

  if let decimalAsDoubleUnwrapped = formatter.numberFromString(decimalAsString) {
    decimalAsDouble = decimalAsDoubleUnwrapped.doubleValue
  }
  return decimalAsDouble!
}

You are calling this function as follows:

var myString: String = "1,234.00" (in case of US locale)
// var myString: String = "1.234,00" (in case of EU locale)
var result: Double

result = convertLocalizedStringToDouble(myString, True)

Please note, that the function will return 0 in case your thousand separator is wrongly placed. For instance something like “1,2345.00” on US locale will result in this error.

Jeannot Muller

Entrepreneur, developer, author.

Click Here to Leave a Comment Below

Leave a Reply: