我正在尝试用swift语言编写一个BMI程序。 我有这个问题:如何转换字符串为双精度?

在Objective-C中,我可以这样做:

double myDouble = [myString doubleValue];

但是如何在Swift语言中实现这一点呢?


当前回答

var stringValue = "55"

var convertToDouble = Double((stringValue as NSString).doubleValue)

其他回答

在Swift 2.0中,最好的方法是避免像Objective-C开发人员那样思考。所以你不应该“将一个字符串转换为Double”,而应该“从一个字符串初始化一个Double”。苹果医生在这里: https://developer.apple.com/library/ios//documentation/Swift/Reference/Swift_Double_Structure/index.html#//apple_ref/swift/structctr/Double/s:FSdcFMSdFSSGSqSd_

它是一个可选的init,所以你可以使用nil合并操作符(??)来设置默认值。例子:

let myDouble = Double("1.1") ?? 0.0

斯威夫特4

extension String {
    func toDouble() -> Double? {
        let numberFormatter = NumberFormatter()
        numberFormatter.locale = Locale(identifier: "en_US_POSIX")
        return numberFormatter.number(from: self)?.doubleValue
    }
}

在字符串包含其他字符的情况下:“27.8°C”,“52.523553 kM”或“Total: 349.0”。

这适用于Swift 4:

let anyString = "52.523553 kM"
let digitsCharacterSet = CharacterSet.init(charactersIn: "0123456789.")
let doubleResult = Double(anyString.components(separatedBy:digitsCharacterSet.inverted).joined())

谨慎!这对包含多个的字符串无效。比如“27.8°C 3.5 kM”

我发现更可读添加一个扩展字符串如下:

extension String {
    var doubleValue: Double {
        return (self as NSString).doubleValue
    }
}

然后你就可以写代码了:

myDouble = myString.doubleValue

在SWIFT 3中,您可以使用:

if let myDouble = NumberFormatter().number(from: yourString)?.doubleValue {
   print("My double: \(myDouble)")
}

注意: —如果字符串中包含除数字、适合区域设置的组或小数分隔符以外的任何字符,解析将失败。 —忽略字符串中任何开头或结尾的空格分隔符。例如,字符串“5”、“5”和“5”都产生数字5。

摘自文档: https://developer.apple.com/reference/foundation/numberformatter/1408845-number