我正在尝试用swift语言编写一个BMI程序。 我有这个问题:如何转换字符串为双精度?
在Objective-C中,我可以这样做:
double myDouble = [myString doubleValue];
但是如何在Swift语言中实现这一点呢?
我正在尝试用swift语言编写一个BMI程序。 我有这个问题:如何转换字符串为双精度?
在Objective-C中,我可以这样做:
double myDouble = [myString doubleValue];
但是如何在Swift语言中实现这一点呢?
当前回答
1.
let strswift = "12"
let double = (strswift as NSString).doubleValue
2.
var strswift= "10.6"
var double : Double = NSString(string: strswift).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”
斯威夫特: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)
使用它,无论你喜欢根据你需要的代码。
这是基于@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
}
另一个选项是将this转换为NSString并使用它:
let string = NSString(string: mySwiftString)
string.doubleValue
为了有一点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在格式化器上,如果你正在处理包含货币符号的字符串的货币。