2014-05-06 3 views
7

J'utilise NSJSONSerialization pour convertir la chaîne JSON NSDictionarayObjective-C: NSJSONSerialization nombre à virgule flottante question

la chaîne JSON est

{"bid":88.667,"ask":88.704} 

après NSJSONSerialization

{ 
    ask = "88.70399999999999"; 
    bid = "88.667"; 
} 

Tout le monde sait ce problème?

+1

avez-vous trouvé une réponse? ... je suis confronté à ce problème. –

+0

@mihirmehta non, je n'ai pas. – damo

Répondre

4

Il semblerait que NSJSONSerialization sérialisera vos valeurs en tant que doubles malgré le fait que les doubles ne sont pas assez précis pour représenter certaines valeurs exactement. Voir plus de détails ici: Does NSJSONSerialization deserialize numbers as NSDecimalNumber?

Si la précision n'est pas super important, vous pouvez simplement arrondir vos valeurs, mais comme vous avez affaire à ce qui semble être une application financière, il vaudrait mieux transformer vos valeurs en entiers par en multipliant par 1000, la sérialisation de celles-ci, et ensuite la conversion en arrière:

{"bid":88667,"ask":88704} 

Une alternative est d'utiliser des chaînes.

1

Utilisez ci-dessous le code pour obtenir votre valeur exacte.

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; 
[formatter setNumberStyle:NSNumberFormatterDecimalStyle]; 
[formatter setMaximumFractionDigits:2]; 
[formatter setRoundingMode: NSNumberFormatterRoundUp]; 

NSString *strNumber = [formatter stringFromNumber:[NSNumber numberWithFloat:88.70399999999999]]; 
NSString *strNumber = [formatter stringFromNumber:[NSNumber numberWithFloat:88.667]]; 

La sortie sera 88,7 & sortie sera 88,67

Questions connexes