2016-08-11 1 views
1

Par exempleDouble est arrondi ma dernière décimale NSNumber

    print(message.timestamp!) 

me donne: 1470938337,572778

    print(Double(message.timestamp!)) 

me donne: 1470938337,57278

J'ai besoin d'utiliser le double pour convertir en NSDate comme celui-ci :

date: NSDate(timeIntervalSince1970: Double(message.timestamp!)) 

mais j'ai aussi besoin des horodatages pour être précis pourquoi arrondit-il?

+0

Cela semble fonctionner correctement http://swiftlang.ng.bluemix.net/#/repl/57acc49a603420ce5f482bb3 – Alexander

+0

Est-ce que 'timestamp' est une chaîne? –

+0

Non, c'est un NSNumber, Il est vraiment déroutant pourquoi il fait cela – slimboy

Répondre

1

Jetez un oeil à cet exemple de code:

import Foundation 

let input: NSNumber = 1470938337.572778 

print(" NSNumber: \(input)") 
print("  Double: \(Double(input))") 
print("doubleValue: \(input.doubleValue)") 

Sortie:

NSNumber: 1,470,938,337.57278 //not even this is printing correctly. 
    Double: 1470938337.57278 
doubleValue: 1470938337.57278 

Ceci est un cas de dépassement du représentable de précision par un type de données à virgule flottante IEEE 754 Double largeur. Le problème n'est pas dans la conversion NSNumber ->Double (ce qui est logique, car NSNumber est un wrapper pour un double).