2016-07-02 3 views
1

J'utilisais un Get et Set pour stocker un Double dans les données de base en tant que NSNumber. Au cours de cette conversion qui était quelque chose comme ça. Si la syntaxe est fausse, cela n'a rien à voir avec ma question, je ne suis tout simplement pas sur mon Mac en ce moment. Je suis finalement arrivé à la conclusion que la seule façon de maintenir l'exactitude de la conversion était d'utiliser une chaîne pour stocker le Double. Je suis bien avec l'utilisation de cette méthode, mais pour ma connaissance future, y at-il un moyen d'empêcher un nombre comme 0.003459 de devenir 0.0034589999999999999999 lorsque vous le récupérez? Ce n'était pas la seule erreur de conversion que j'ai trouvée. Parfois, ça tournait quand je ne le voulais pas. Je comprends que cela a probablement quelque chose à voir avec le fait que toutes les valeurs décimales ne peuvent pas être correctement représentées en binaire. S'il y a un moyen de convertir sans perdre de précision j'apprécierais cette connaissance.Existe-t-il un moyen de convertir de Double à NSNumber et de maintenir la précision à au moins 6 décimales dans Swift?

+1

Quel est le format de la propriété dans les données de base? Vous devriez probablement passer à des décimales. –

Répondre

1

La précision est très supérieure à 6 chiffres décimaux.

En utilisant vos numéros: 0.003459 - 0.0034589999999999999999 = 1e-22

Le problème est la fonction de formatage (ou l'absence de celui-ci).

+0

Vous avez raison à propos de l'exactitude. Je pensais à ce sujet d'un point de vue différent. Je voulais trouver un moyen de faire == sur le double avant et après que cela garantisse que tout ce que j'envoie revienne le même. Je suis bien avec le formatage du code en arrondissant, mais peu importe ce que j'ai essayé, les résultats sont sortis biaisés. Je pense que la conversion de cordes pourrait bien être la meilleure voie pour ce genre de chose. – Sethmr