2009-12-26 4 views
0

Comment enregistrer correctement des valeurs numériques dans SQLite3. J'ai utilisé le type réel pour stocker la valeur numérique. Par exemple: quand je stocke 233333.00 est bien. Mais quand je stocke 23333333.00 il devient 23333300.00. Pourquoi est-il enregistré comme 2.3333333E7 et récupéré comme 2.33333e + 07. Y a-t-il un moyen de surmonter cela?Enregistrement et récupération de valeurs numériques à partir de Sqlite3

Répondre

2

Le type réel utilisé par SQLite est stocké sous la forme d'un nombre à virgule flottante IEEE de 8 octets et ne peut pas stocker toutes les valeurs exactement. Si vous voulez des valeurs exactes, utilisez une chaîne de nombres entiers.

+0

Merci. Une idée de quel type de champ de données serait préférable d'utiliser le type REAL? – ychian

+0

Il n'y a pas de type * real * dans le monde physique. Si vous avez besoin de stocker de l'argent, vous pouvez utiliser le champ entier (en centimes). Si vous avez besoin de chaînes exactes avec une précision arbitraire, vous pouvez en faire une chaîne. Vous pouvez utiliser réel si vous pouvez vivre avec une perte de précision. –

0

Vous perdez de la précision car la variable de votre programme a une seule précision et vous avez besoin de double.

Le point flottant est en fait parfaitement précis pour les valeurs intégrales qui s'insèrent dans la mantisse.

Vous obtenez 24 bits pour les singles et 53 pour le double.

Ce n'est pas un problème de sqlite du tout.