在 Swift 中将字符串转换为双精度数 (Xcode v 7.0.1)
Converting a String to a Double in Swift (Xcode v 7.0.1)
我在 Swift 中将 String 转换为 Double 时出奇地困难。为了让您大致了解我在做什么,我正在解析一个 XML 文件并从某些元素中检索值。代码看起来像这样,
var lat = ""
var lati = 0.0
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if elementName == "lat" {
self.lat = foundCharacters
self.lati = (self.lat as NSString).doubleValue
}
}
当我打印 self.lat
时,坐标输出为字符串“36.97736”。但是,当我打印 self.lati
时,会打印 Double 0.0。
我也试过了
self.lat = foundCharacters
let formatter = NSNumberFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US")
if let decimalAsDoubleUnwrapped = formatter.numberFromString(self.lat) {
self.lati = decimalAsDoubleUnwrapped.doubleValue
}
我得到了和以前一样的结果。
已修复:原来有额外的白色 space 字符 (spaces) 被添加到“36.97736”的前面并且 Swift 抱怨该字符串不是Double 格式,所以它返回 nil。
在 Swift 2.0 中,您可以使用 Double("String"),其中 returns 是可选的。以下是如何在您的代码中使用它
lat = foundCharacters //not mentioned in the function btw
if let doubleFromlat = Double(lat) {
lati = doubleFromlat
} else { print("foundCharacters does not hold double") }
你可以试试这个:
extension String {
var asDouble : Double? {
if let d = Double(self) {
return d
}
return nil
}
}
let s = "21.5"
s.asDouble
使用NSNumberFormatter().numberFromString(:)?.doubleValue
。因此,在您发布的片段的上下文中:
let foundCharacters = "12.345"
let lat = foundCharacters
var lati: Double
if let doubleFromlat = Double(lat) {
let lati = NSNumberFormatter().numberFromString(foundCharacters)?.doubleValue
} else {
print("foundCharacters does not hold double")
}
我在 Swift 中将 String 转换为 Double 时出奇地困难。为了让您大致了解我在做什么,我正在解析一个 XML 文件并从某些元素中检索值。代码看起来像这样,
var lat = ""
var lati = 0.0
func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) {
if elementName == "lat" {
self.lat = foundCharacters
self.lati = (self.lat as NSString).doubleValue
}
}
当我打印 self.lat
时,坐标输出为字符串“36.97736”。但是,当我打印 self.lati
时,会打印 Double 0.0。
我也试过了
self.lat = foundCharacters
let formatter = NSNumberFormatter()
formatter.locale = NSLocale(localeIdentifier: "en_US")
if let decimalAsDoubleUnwrapped = formatter.numberFromString(self.lat) {
self.lati = decimalAsDoubleUnwrapped.doubleValue
}
我得到了和以前一样的结果。
已修复:原来有额外的白色 space 字符 (spaces) 被添加到“36.97736”的前面并且 Swift 抱怨该字符串不是Double 格式,所以它返回 nil。
在 Swift 2.0 中,您可以使用 Double("String"),其中 returns 是可选的。以下是如何在您的代码中使用它
lat = foundCharacters //not mentioned in the function btw
if let doubleFromlat = Double(lat) {
lati = doubleFromlat
} else { print("foundCharacters does not hold double") }
你可以试试这个:
extension String {
var asDouble : Double? {
if let d = Double(self) {
return d
}
return nil
}
}
let s = "21.5"
s.asDouble
使用NSNumberFormatter().numberFromString(:)?.doubleValue
。因此,在您发布的片段的上下文中:
let foundCharacters = "12.345"
let lat = foundCharacters
var lati: Double
if let doubleFromlat = Double(lat) {
let lati = NSNumberFormatter().numberFromString(foundCharacters)?.doubleValue
} else {
print("foundCharacters does not hold double")
}