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

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

double myDouble = [myString doubleValue];

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


当前回答

试试这个:

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

NOTE

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

其他回答

如前所述,实现这一目标的最佳方法是直接铸造:

(myString as NSString).doubleValue

在此基础上,你可以创建一个流畅的本地Swift String扩展:

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

这允许你直接使用:

myString.doubleValue

它会帮你选角。如果苹果确实添加了一个doubleValue到本地字符串,你只需要删除扩展和其余的代码将自动编译好!

斯威夫特:4和5

可能有两种方法:

String -> Int -> Double: let strNumber = "314" if let intFromString = Int(strNumber){ let dobleFromInt = Double(intFromString) 打印(dobleFromInt) } String -> NSString -> Double 让strNumber1 = "314" 让NSstringFromString = NSString(字符串:strNumber1) let doubleFromNSString = NSstringFromString.doubleValue 打印(doubleFromNSString)

使用它,无论你喜欢根据你需要的代码。

同样有效的方法:

// Init default Double variable
var scanned: Double()

let scanner = NSScanner(string: "String to Scan")
scanner.scanDouble(&scanned)

// scanned has now the scanned value if something was found.

斯威夫特4

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

这是基于@Ryu的回答

只要你在一个用圆点作为分隔符的国家,他的解决方案就很好。默认情况下NSNumberFormatter使用设备区域设置。因此,在所有使用逗号作为默认分隔符的国家(包括法国的@PeterK),这将失败。如果数字使用点作为分隔符(通常情况下)。要将这个NSNumberFormatter的区域设置为US,并使用圆点作为分隔符替换行

return NSNumberFormatter().numberFromString(self)?.doubleValue

with

let numberFormatter = NSNumberFormatter()
numberFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
return numberFormatter.numberFromString(self)?.doubleValue

因此,完整的代码变成

extension String {
    func toDouble() -> Double? {
        let numberFormatter = NSNumberFormatter()
        numberFormatter.locale = NSLocale(localeIdentifier: "en_US_POSIX")
        return numberFormatter.numberFromString(self)?.doubleValue
    }
}

要使用它,只需调用"Your text goes here".toDouble()

这将返回一个可选的Double?

正如@Ryu提到的,你可以强制展开:

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
}