Swift - 如何将String转换为Double我正在尝试用快速语言编写BMI程序。我遇到了这个问题:如何将String转换为Double?在Objective-C中,我可以这样做:double myDouble = [myString doubleValue];但是如何在Swift语言中实现这一目标呢?
3 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
有新failable初始化,允许你这样做的更地道和安全的方式(尽可能多的答案已经注意到,的NSString的双重价值也不是很安全的,因为它的非数值返回0。这意味着,doubleValue
中"foo"
和"0"
是相同。)
let myDouble = Double(myString)
这将返回一个可选项,因此在传入返回0的情况下"foo"
,doubleValue
可返回的初始化函数将返回nil
。您可以使用guard
,if-let
或map
处理Optional<Double>
原帖: 您不需要像接受的答案建议那样使用NSString构造函数。您可以像这样简单地桥接它:
(swiftString as NSString).doubleValue
幕布斯6054654
TA贡献1876条经验 获得超7个赞
对于更多Swift的感觉,使用NSFormatter()
避免强制转换NSString
,并nil
在字符串不包含Double
值时返回(例如“test”将不返回0.0
)。
let double = NSNumberFormatter().numberFromString(myString)?.doubleValue
或者,扩展Swift的String
类型:
extension String { func toDouble() -> Double? { return NSNumberFormatter().numberFromString(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}
更新: 对于本地化,将区域设置应用于NSFormatter非常容易,如下所示:
let formatter = NSNumberFormatter()formatter.locale = NSLocale(localeIdentifier: "fr_FR")let double = formatter.numberFromString("100,25")
最后,NSNumberFormatterCurrencyStyle
如果您使用的字符串包含货币符号,则可以在格式化程序上使用。
- 3 回答
- 0 关注
- 3277 浏览
添加回答
举报
0/150
提交
取消