【问题标题】:Unable to convert String to double Swift无法将字符串转换为双 Swift
【发布时间】:2018-04-17 19:35:30
【问题描述】:

对于我的应用程序,我需要将字符串转换为双精度值,因为我必须为我的应用程序创建一个 CLLocationObject,因此我需要这些双精度值。 因此我尝试了这个:

 let lat = (cityObject.lat as! NSString).doubleValue

如果我打印正常的字符串,我会得到以下信息:

一些(“可选(52.523553)”)一些(“可选(13.403783)”)

如果我打印我的 double 值,我会得到以下信息:

0.0 0.0

【问题讨论】:

  • cityObject.lat的类型是什么?
  • 你可以试试:Double(cityObject.lat as!NSString) 还是 Double(cityObject.lat) ?
  • cityobject.lat 是一个字符串,我从 Firebase 解析这个值
  • Doule(cityobject.lat as! NSString) 也不行
  • 我强烈怀疑 cityObject.lat 不是字符串。

标签: swift double


【解决方案1】:

请试试这个:

extension String {
    func toDouble() -> Double? {
        return NumberFormatter().number(from: self)?.doubleValue
    }
}

你可以这样访问:

var myString = "1.2"
var myDouble = myString.toDouble()

您可以删除可选如下:

if let data:NSDictionary = snap.value as! NSDictionary,  let lat = data.value(forKey: "lat"),let lng = data.value(forKey: "lng") {
    //then use thes let long to convert in Double

    let latValue = lat.toDouble()
    let lngValue = lng.toDouble()
    }

【讨论】:

  • “String”类型的值没有成员“toDouble”
  • 你能解释一下吗?
  • 您的代码正在运行,但我的问题没有解决,因为我发现我从我的 Firebase 数据库中收到了一个可选字符串,而这不适用于您的扩展程序。你知道如何删除可选扩展吗?
  • 如果你能检查我的代码那就太好了:stackoverflow.com/questions/49887481/…
  • @Dominik 试试if let dict = snap.value as? [String: Any], let lat = dict["lat"] as? Double, let lng = dict["lng"] as? Double, let radius = dict["radius"] as? Double {
【解决方案2】:

Double 有一个可失败的初始化程序,它接受一个String 并返回一个可选的Double?,因为显然不是所有的Strings 都是有效的Doubles。这意味着您需要解开结果:

guard let value = Double("1.0") else {
   print("Not a valid Double")
}
print(value)

【讨论】:

  • 愚蠢的错误:您错过了guard 内的范围退出(例如,returnthow 等)。
【解决方案3】:

请尝试以下一种,它会完美运行

扩展字符串{

var toDoubleVal: Double {

    return Double(self) ?? 0.0
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 2018-10-02
    • 1970-01-01
    • 2020-10-20
    • 2020-12-14
    相关资源
    最近更新 更多