Le stockage de la valeur des devises en SQLite3
Je fais face à beaucoup de différentes monnaies dans mon application, et je voudrais savoir quelle est la "meilleure" façon est de les stocker dans une base de données SQLite3.
Je me suis penché vers un point fixe de la représentation (c'est à dire les stocker sous forme de nombres entiers, où $3.59 est stocké comme 359, ¥400 stockées en tant que 40000). Est-ce une bonne idée? Que faire si mes données d'entrée les modifications ultérieures et exige plus de précision?
OriginalL'auteur nornagon | 2010-07-16
Vous devez vous connecter pour publier un commentaire.
Étant donné que SQLite 3 permettra d'utiliser jusqu'à 8 octets pour stocker ENTIER types, sauf si vous allez avoir un nombre supérieur à 10^16, vous devriez être bien.
Pour mettre cela en perspective, le monde produit intérieur brut exprimé en millièmes de USD (un million) est d'environ 61'000'000'000'000'000 qui sqlite3 a aucun problème à exprimer.
Sauf si vous êtes la manipulation interplanétaire de la comptabilité, je ne pense pas que vous ayez à vous inquiéter.
Eh bien, pour être tout à fait précis, cela ne tient pas compte de toutes les éventualités: en.wikipedia.org/wiki/...
OriginalL'auteur msw
Dans le logiciel financier de la monnaie est toujours représenté en virgule fixe (décimal).
Vous pouvez émuler dans SQLite en utilisant des entiers (64-bit integer contient jusqu'à 18 chiffres).
OriginalL'auteur Piotr
Je dirais chaîne/texte. Vous pouvez toujours convertir en ce que la culture si vous avez besoin de le faire.
OriginalL'auteur AlvinfromDiaspar
meilleur de change de Type de données est
BigDecimal
et dans sqlite, vous pouvez l'enregistrer dans unVARCHAR
champormlite convertir BigDecimal de chaîne lorsque vous stockez.
ormlite doc pour BigDecimal
OriginalL'auteur do01
SQLite n'a pas de BigDecimal champ
J'utilise donc le SQLite type Entier, et de convertir de la sorte:
BigDecimal bd = new BigDecimal("1234.5678");
int packedInt = bd.scaleByPowerOfTen(4).intValue(); //packedInt maintenant = 12345678
Maintenant enregistrer packedInt à SQLite champ de type Entier.
Pour revenir à BigDecimal:
BigDecimal bd = new BigDecimal(packedInt); //bd = 12345678
bd = bd.scaleByPowerOfTen(-4); //maintenant, bd = 1234.5678
OriginalL'auteur J.W.L