2017-05-01 4 views
0

Je crée un tableau appelé testArray. Je l'enregistre ensuite aux valeurs par défaut de l'utilisateur. Et récupérez-le à partir des valeurs par défaut de l'utilisateur. Lorsque je connecte l'original "testArray" et enregistre le "retrieveArray" récupéré, les champs de longitude et de latitude ont changé.Un tableau rapide de dictionnaires contient un double, en sauvegardant les valeurs par défaut de l'utilisateur en ajoutant des décimales

Par exemple:

TestArray: "de longitude": 31,132013199999999

retrievedArray: "de longitude": 31,1320132

Pourquoi? Et encore plus étrange - pourquoi le tableau récupéré se connecte correctement, mais le tableau d'origine est connecté avec des décimales supplémentaires?

Merci.

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) 

SORTIE

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

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

MISE À JOUR: Certains ont dit que « double question » est utilisé de manière trop agressive sur StackOverflow, et je l'ai remarqué que parfois. Mais dans ce cas, oui! Cette "question en double" semble parler de la question. Je vous remercie.

Répondre

1

Ceci est un round-off error.

Je vous suggère de convertir le double en chaîne, ou arrondir la valeur. Vous pouvez voir de nombreuses solutions where.

+0

Merci Macabeus. Comment l'arrondi entre-t-il dans l'image? Dans les exemples du lien "where" que vous avez fourni, ils contiennent tous explicitement une référence directe à l'arrondissement. Dans le code que j'ai posté, il n'y a pas d'appel à une fonction d'arrondi ou à une propriété. Êtes-vous en train de dire que l'arrondissement est fait automatiquement? Ce qui semble déroutant, c'est que s'il s'agit d'une erreur d'arrondi, cela se passe sur une valeur littérale que je déclare et ensuite sortie vers la console sans l'arrondir. Merci! –