Pour certaines raisons, certains doublons dans mon application Swift me causent des problèmes lors de la conversion à NSNumber, tandis que d'autres ne le sont pas. Mon application doit convertir les doublons avec 2 décimales (prix) en NSNumbers afin qu'ils puissent être stockés et récupérés en utilisant les données de base. Par exemple, quelques prix particuliers tels que 79,99 seraient évalués à 99,98999999999999 sauf si spécifiquement mis en forme en utilisant la méthode doubleValue de NSNumber.Conversion de Double à NSNumber dans Swift Perte Précision
Ici selectedWarranty.price = 79.99 comme le montre Débogueur
// item.price: NSNumber?
// selectedWarranty.price: Double?
item.price = NSNumber(double: selectedWarranty.price!)
Je programmé des instructions d'impression pour montrer comment la conversion fonctionne
Original double: 79.99
Converted to NSNumber: 79.98999999999999
.doubleValue Representation: 79.99
Quelqu'un peut-il expliquer s'il y a une raison pour laquelle la l'initialiseur ne peut sûrement pas garder 2 décimales pour chaque nombre? Je voudrais vraiment stocker les prix dans les données de base comme ils devraient l'être. Le formatage à chaque fois qu'il est affiché ne semble pas très pratique.
MISE À JOUR: converti objet de base de données au type NSDecimalNumber par modèle de données, 79,99 et 99,99 ne sont plus un problème, mais question maintenant plus facile à gérer avec des nombres différents ...
Original double: 39.99
Converted to NSDecimalNumber: 39.99000000000001024
Pouvez-vous faire un [exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve)? – Alexander
Utilisez NSDecimalNumber au lieu de NSNumber pour la devise. – rmaddy
Je ne parviens pas à reproduire ce problème. http://swiftlang.ng.bluemix.net/#/repl/57bdc2590dcf4abf47da28c2 – Alexander