字符串在XCode 6的Swift中加倍
如何在Swift中将字符串转换为double? 我已经尝试过string.doubleValue或string.bridgeToObjectiveC()。doubleValue并且它都不起作用。 有任何想法吗?
您可以创建只读计算属性字符串扩展名来帮助您将字符串转换为double:
您可以使用NSNumberFormatter
extension String { struct Number { static let formatter = NSNumberFormatter() } var doubleValue: Double { return Number.formatter.numberFromString(self)?.doubleValue ?? 0 } }
或者您可以将其强制转换为NSString并提取其doubleValue属性:
extension String { var ns: NSString { return self } var doubleValue: Double { return ns.doubleValue } } "2.35".doubleValue + 3.3 // 5.65
根据斯坦福CS193p课程2015年冬季,在Swift中从String中获取double的正确方法是使用NSNumberFormatter而不是NSString:
let decimalAsString = "123.45" let decimalAsDouble = NSNumberFormatter().numberFromString(decimalAsString)!.doubleValue
如果您想要安全(关于可选的展开和小数分隔符),您可以使用:
let decimalAsString = "123.45" var formatter = NSNumberFormatter() formatter.locale = NSLocale(localeIdentifier: "en_US") if let decimalAsDoubleUnwrapped = formatter.numberFromString(decimalAsString) { decimalAsDouble = decimalAsDoubleUnwrapped.doubleValue }
如果解析XML或JSON文件并且需要确保有一个可以转换为Double的String(如果强制解包实际为nil的可选项,则程序将崩溃),安全解包特别有用。
/!\编辑:小心, NSNumberFormatter的工作方式与NSString不同。 NSString允许你执行以下操作:( 字典[key] as NSString).doubleValue ,前提是字典[key]使用’。’ 作为小数分隔符(如“123.45”)。 但是,NSNumberFormatter()默认使用您当前的系统Locale初始化NSNumberFormatter的实例! 因此, NSNumberFormatter()。numberFromString(decimalAsString)!。doubleValue可以在美国设备上使用123.45,但不能在法语设备上使用! 例如,如果要解析JSON文件,并且您知道使用“。”存储值。 作为小数分隔符,您需要相应地设置NSNumberFormatter实例的区域设置:
var formatter = NSNumberFormatter() formatter.locale = NSLocale(localeIdentifier: "en_US")
然后:
let decimalAsString = "123.45" if let decimalAsDoubleUnwrapped = NSNumberFormatter().numberFromString(decimalAsString) { decimalAsDouble = decimalAsDoubleUnwrapped.doubleValue }
在这种情况下,decimalAsDouble将正确返回123.45作为doubleValue。
但如果decimalAsString =“123,45”,它将返回nil。 或者如果NSLocale设置为“fr_FR”。 另一方面,使用带有fr_FR的NSLocale的NSNumberFormatter与“123,45”完美匹配,但返回nil为“123.45”。
我认为这值得提醒。 我相应地更新了答案。
编辑:同样,NSNumberFormatter不会知道“+ 2.45%”或“0.1146”之类的内容(您必须非常精确地定义NSNumberFormatter实例的属性)。 NSString本身就可以。
你总是可以像这样从String转换为NSString
let str = "5" let dbl = (str as NSString).doubleValue
尝试这个 :
var a:Double=NSString(string: "232.3").doubleValue
尝试这个:
let str = "5" let double = Double(str.toInt()!)
另一种方式是:
let mySwiftString = "5" var string = NSString(string: mySwiftString) string.doubleValue
后一个贴在这里:
Swift – 如何将String转换为Double