2013-03-05 3 views
1

Je stocke certaines valeurs dans la base de données sqlite. Ainsi, les données sont collectées à partir d'un champ de texte sous la forme d'une chaîne, puis converties en double et persistantes.Double précision perdue

C'est quelque chose que j'ai essayé

NSDecimalNumber answer;
value.answer = [NSDecimalNumber decimalNumberWithString:answerValue];

Si vous utilisez 6532,002 comme les données, il perd sa précision.

Une idée pour résoudre ce problème. Je comprends qu'un problème similaire a été signalé à plusieurs reprises, mais après avoir essayé un certain nombre de solutions recommandées, je n'ai pas encore réussi à résoudre le problème.

Merci

+0

« Il perd sa précision » - Pouvez-vous préciser où la conversion lossy est en cours? –

+0

Le nombre est converti en sa forme double [value.answer doubleValue] où il perd sa précision. La nouvelle valeur est 6532.0019999999995 – jajo87

+0

Pourquoi ne pas simplement le stocker comme une chaîne? Aucun problème de conversion désordonné alors .... – lnafziger

Répondre

1

Votre numéro ne peut pas être représenté exactement comme une valeur double précision en virgule flottante en raison du nombres à virgule flottante façon de travailler. Vous devrez trouver une autre façon de le représenter si vous avez besoin de ce genre de précision. Certaines options consistent à utiliser une bibliothèque de précision arbitraire (telle que the ones listed in this Wikipedia entry) ou à utiliser un fixed point representation avec le nombre de bits dont vous avez besoin pour obtenir la précision dont vous avez besoin. Si vous affichez uniquement les nombres, vous devriez le garder sous forme de chaîne.

0

utilisation

float value=[textField.text floatValue]; 
Questions connexes