我正在尝试用swift语言编写一个BMI程序。 我有这个问题:如何转换字符串为双精度?
在Objective-C中,我可以这样做:
double myDouble = [myString doubleValue];
但是如何在Swift语言中实现这一点呢?
我正在尝试用swift语言编写一个BMI程序。 我有这个问题:如何转换字符串为双精度?
在Objective-C中,我可以这样做:
double myDouble = [myString doubleValue];
但是如何在Swift语言中实现这一点呢?
当前回答
你可以使用StringEx。它用字符串到数字的转换扩展了String,包括toDouble()。
extension String {
func toDouble() -> Double?
}
它验证字符串,如果不能转换为double则失败。
例子:
import StringEx
let str = "123.45678"
if let num = str.toDouble() {
println("Number: \(num)")
} else {
println("Invalid string")
}
其他回答
斯威夫特: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)
使用它,无论你喜欢根据你需要的代码。
试试这个:
var myDouble = myString.bridgeToObjectiveC().doubleValue
println(myDouble)
NOTE
在Beta 5中删除。这已经不管用了?
从Swift 1.1开始,你可以直接将String传递给const char *形参。
import Foundation
let str = "123.4567"
let num = atof(str) // -> 123.4567
atof("123.4567fubar") // -> 123.4567
如果你不喜欢deprecated atof:
strtod("765.4321", nil) // -> 765.4321
注意:转换的行为不同于NSString.doubleValue。
Atof和strtod接受0x前缀十六进制字符串:
atof("0xffp-2") // -> 63.75
atof("12.3456e+2") // -> 1,234.56
atof("nan") // -> (not a number)
atof("inf") // -> (+infinity)
如果你更喜欢.doubleValue行为,我们仍然可以使用CFString桥接:
let str = "0xff"
atof(str) // -> 255.0
strtod(str, nil) // -> 255.0
CFStringGetDoubleValue(str) // -> 0.0
(str as NSString).doubleValue // -> 0.0
我的问题是逗号,所以我这样解决它:
extension String {
var doubleValue: Double {
return Double((self.replacingOccurrences(of: ",", with: ".") 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