将字符串转换为双精度值将得到nil

时间:2018-10-30 09:55:36

标签: swift string casting double

我正在解析一个文本文件,以获取位置的纬度和经度。我需要将lon / lat字符串转换为双精度,但我做不到。

我已经尝试了Double(String)方法和(String as NSNumber).doubleValue。它总是给出零。

当我手动输入数字时,它可以工作。

这是代码段:

var items = [[String]]()
    func readParkingData() {
        guard let filepath = Bundle.main.path(forResource: "parking", ofType: "txt") else {
            print("file not found")
            return
        }
        print("file path : \(filepath)")

        do{
            let content = try String(contentsOfFile: filepath, encoding: .utf8)
            let attributed = content.htmlAttributedString
            let decoded : String = attributed!.string
            let split = decoded.split(separator: ";")

            var count = 0
            var item = [String]()
            for word in split {
                item.append(String(word))
                count += 1
                if count == 30 {
                    items.append(item)
                    item = [String]()
                    count = 0
                }
            }

            for entry in items {
                print(entry[24])
                print(entry[25])
                let latString : String = entry[24]
                let lonString : String = entry[25]
                print(type(of: latString))
                let lat = Double(latString)
                print(lat)

            }

        }catch{
          print("file read error \(filepath)")
        }

    }

我已经浏览了其他答案。 latString的类型为String,不是可选的。修剪空格也无济于事。 lat始终为零。

这是怎么回事?

1 个答案:

答案 0 :(得分:1)

显然,浮点数用引号引起来, 因此,您不仅需要修剪空格,还需要引号。示例:

let latString = "\"12.34\""
print(latString) // "12.34"

var cs = CharacterSet.whitespaces
cs.insert("\"")

let trimmedLatString = latString.trimmingCharacters(in: cs)
print(trimmedLatString) // 12.34

print(Double(trimmedLatString)!) // 12.34

更多评论:

  • 我看不到对htmlAttributedString进行操作的原因,您 可能应该将原始content分成行和字段。
  • 您输入的是CSV格式的文件吗?有开源的CSV阅读器库 您可以尝试。
相关问题