2017-05-01 64 views
0

我創建了一個名爲testArray的數組。然後我將它保存爲用戶默認值。並從用戶默認值中檢索它。當我記錄原始「testArray」並記錄檢索到的「retrieveArray」時,經度和緯度字段已經改變。Swift數組字典包含一個double,保存到用戶的默認值添加小數位

例如:

testArray: 「東經」:31.132013199999999

retrievedArray: 「東經」:31.1320132

這是爲什麼?而陌生人仍然 - 爲什麼被檢索的數組正確記錄,但原來的數組是記錄額外的小數位?

謝謝。

let testarray = 
Array(
arrayLiteral: 
["longitude":31.1320132], 
["longitude":31.1320132], 
["longitude":31.1320132], 
["longitude":31.1320132]) 

UserDefaults.standard.set(testarray, forKey: "myTestArray") 

let retrievedArray = UserDefaults.standard.value(forKey:"myTestArray") 

NSLog((testarray as! Array<Dictionary<String,Any>>)[2].description) 

NSLog((retrievedArray as! Array<Dictionary<String,Any>>)[2].description) 

輸出

app[75897:9783167] ["longitude": 31.132013199999999] 

app[75897:9783167] ["longitude": 31.1320132] 

UPDATE:有人說,「重複問題」是用來在計算器上過於激進,而且我注意到,在倍。但在這種情況下,是的!這個「重複問題」確實似乎說明了這個問題。謝謝。

回答

1

這是一個round-off error

我建議您將double轉換爲字符串或四捨五入的值。您可以看到很多解決方案where

+0

謝謝Macabeus。舍入是如何進入圖片的?在您提供的「where」鏈接的示例中,它們都明確包含對四捨五入的直接引用。在我發佈的代碼中,沒有調用舍入函數或屬性。你是說四捨五入是自動完成的嗎?令人困惑的是,如果這是一個四捨五入的錯誤,它發生在我聲明的字面值上,然後輸出到控制檯而沒有四捨五入。謝謝! –