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

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

double myDouble = [myString doubleValue];

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


当前回答

斯威夫特3

要清除,现在有一个默认的方法:

public init?(_ text: String)` of `Double` class.

它可以用于所有类。

let c = Double("-1.0")
let f = Double("0x1c.6")
let i = Double("inf")

等。

其他回答

为了有一点Swift的感觉,使用NSFormatter()避免转换为NSString,并在字符串不包含Double值时返回nil(例如:"test"不会返回0.0)。

let double = NSNumberFormatter().numberFromString(myString)?.doubleValue

或者,扩展Swift的String类型:

extension String {
    func toDouble() -> Double? {
        return NumberFormatter().number(from: self)?.doubleValue
    }
}

并像toInt()一样使用它:

var myString = "4.2"
var myDouble = myString.toDouble()

这返回一个可选的Double?它必须被打开。

要么是强行打开:

println("The value is \(myDouble!)") // prints: The value is 4.2

或者使用if let语句:

if let myDouble = myDouble {
    println("The value is \(myDouble)") // prints: The value is 4.2
}

更新: 对于本地化,将locale应用到NSFormatter是非常容易的,如下所示:

let formatter = NSNumberFormatter()
formatter.locale = NSLocale(localeIdentifier: "fr_FR")
let double = formatter.numberFromString("100,25")

最后,你可以使用NSNumberFormatterCurrencyStyle在格式化器上,如果你正在处理包含货币符号的字符串的货币。

试试这个:

   var myDouble = myString.bridgeToObjectiveC().doubleValue
   println(myDouble)

NOTE

在Beta 5中删除。这已经不管用了?

在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

我们可以使用CDouble值,它将通过myString.doubleValue获得

另一个选项是将this转换为NSString并使用它:

let string = NSString(string: mySwiftString)
string.doubleValue