2017-10-14 216 views
1

我試圖在我的地圖上添加緯度和經度標註。 我的數據是JSON類型將NSNumber轉換爲Double(CLLocationDegrees)

"{\"lat\": 25.0437396, \"lng\": 121.5308224}" 

我將其轉化爲在字典詞典第一

["lat": 25.0437396, "lng": 121.5308224] 

,並使用該值增加

var coordinate = CLLocationCoordinate2D() 
let latNum = shopCoordinate["lat"] as! NSNumber 
let lngNum = shopCoordinate["lng"] as! NSNumber 
let lat = latNum as? Double 
let lng = lngNum as? Double 
coordinate.latitude = lat! 
coordinate.longitude = lng! 

但雙類型值會變成這樣這個,不要在地圖上顯示

25.043739599999999, 121.53082240000001 

我不能將它轉換爲其他類型,因爲CLLocationDegrees接受一個double類型。它讓我瘋狂。如果有人能給我任何建議,我會非常感激。

回答

0

爲什麼不直接將其直接轉換爲Double

if let latNum = shopCoordinate["lat"] as? Double, let lngNum = shopCoordinate["lng"] as? Double { 
    let coordinate = CLLocationCoordinate2D(latitude: latNum, longitude: lngNum) 
} 
+0

謝謝。你的代碼比我的更優雅。 – Satty

0

你快到了。您只需要將您的數據轉換爲Double而不是NSNumber,如下所示:

var coordinate = CLLocationCoordinate2D() 
let lat = shopCoordinate["lat"] as! Double 
let lng = shopCoordinate["lng"] as! Double 
coordinate.latitude = lat 
coordinate.longitude = lng 
+0

我一直擔心鑄造後失去精度。感謝您指出。 – Satty

+0

@Satty 25.043739599999999它與25.0437396相同 –