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

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

double myDouble = [myString doubleValue];

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


当前回答

Swift 2更新 有新的可失败的初始化器,允许你以更习惯和安全的方式来做这件事(正如许多答案所指出的,NSString的double值不是很安全,因为它对非数字值返回0。这意味着"foo"和"0"的doubleValue是相同的。)

let myDouble = Double(myString)

这将返回一个可选值,因此在诸如传入"foo"时doubleValue将返回0,可失败的初始化器将返回nil。您可以使用守卫、if-let或映射来处理Optional<Double>

原来的帖子: 你不需要像接受的答案那样使用NSString构造函数。你可以像这样简单地桥接它:

(swiftString as NSString).doubleValue

其他回答

斯威夫特4.0

试试这个

 let str:String = "111.11"
 let tempString = (str as NSString).doubleValue
 print("String:-",tempString)

1.

let strswift = "12"
let double = (strswift as NSString).doubleValue

2.

var strswift= "10.6"
var double : Double = NSString(string: strswift).doubleValue 

也许这对你有帮助。

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

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

然后你就可以写代码了:

myDouble = myString.doubleValue

我的问题是逗号,所以我这样解决它:

extension String {
    var doubleValue: Double {
        return Double((self.replacingOccurrences(of: ",", with: ".") as NSString).doubleValue)
    }
}

斯威夫特4

extension String {
    func toDouble() -> Double {
        let nsString = self as NSString
        return nsString.doubleValue
    }
}