Je connais quelques bonnes options :
Grands entiers (par exemple, int64_t, mpz_t, toute lib bignum ) pour représenter des cents ou 10 -n cents - disons, un entier représente 1/100 de penny (1,05 $ == 10500). C'est ce qu'on appelle un entier mis à l'échelle .
Bibliothèque de haut niveau pour l'arithmétique décimale de précision arbitraire telle que BigDecimal en Java, Decimal en Python, decimal.js en Javascript, boost :: multiprecision en C ++
Cordes.
Les BCD emballés (décimales codées binaires) sont une méthode plus ésotérique qui semblait populaire dans les anciens logiciels. En savoir plus au sujet il.
Dans le code de production pour les banques (ou cartes de crédit, distributeurs automatiques de billets, systèmes POS), quel type de données est le plus utilisé? Je demande surtout à ceux qui travaillaient pour les banques.
EDIT: Liens super utiles pour ceux ayant le même domaine problématique (ayant besoin d'implémenter une structure de données "monétaire" qui ne casse pas).
- http://martinfowler.com/eaaDev/quantity.html
- http://www.codeproject.com/Articles/28244/A-Money-type-for-the-CLR
- http://c2.com/cgi/wiki?MoneyObject
- http://www.setfiremedia.com/blog/7-top-tips-for-coding-with-currency
- http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
EDIT pour le boursier qui a dit qu'il s'agissait d'une question en double : il s'agit d'une question pratique et non théorique de "quel est le meilleur". Lisez le titre inédit de ma question. Je demande ce que les gens ont vu de première main dans les bases de code des banques.
Je sais que BigDecimal est "le meilleur" évidemment, mais de belles API comme celle-ci ne sont pas disponibles partout, croyez-le ou non, et les bibliothèques décimales sont chères par opposition aux ints.
la source
Réponses:
La plupart des banques sont toujours sur des ordinateurs centraux. Les types de données sur les mainframes sont très maladroits par rapport aux normes actuelles. Il peut s'agir uniquement des chiffres codés en caractères. Donc, 1234.56 serait vraiment une chaîne contenant ces chiffres. Et un caractère peut avoir 4, 6 ou 9 bits. Ou, dans des situations "optimisées", il peut y avoir deux chiffres regroupés dans un seul caractère. Après tout, vous n'avez besoin que de 4 bits (un quartet) pour un caractère décimal.
Vous vous demandez comment diable ils ont pu opérer avec ces solutions. Ils sont souvent basés sur l'architecture matérielle. Nous sommes habitués aux multiples architectures 8 bits. Autrefois, ce n'était pas acquis.
Unisys utilise des mots de 36 bits et les mots peuvent être décomposés en parties de 6 bits, 9 bits, 12 bits ou 18 bits avant d'être utilisés pour stocker des données.
Soyez simplement heureux que nous n'ayons plus à nous occuper de ces choses. Le framework .NET a un joli type appelé décimal qui est bon pour les devises.
la source