92 votes

Représentant des Valeurs Monétaires en Java

Je comprends que BigDecimal est meilleure pratique recommandée pour la représentation des valeurs monétaires en Java. Qu'utilisez-vous? Est-il mieux de la bibliothèque que vous souhaitez utiliser à la place?

79voto

ninesided Points 12355

BigDecimal tout le chemin. J'ai entendu parler de certaines personnes à créer leur propre Cash ou Money des classes qui encapsulent une valeur monétaire à la monnaie, mais sous la peau c'est toujours un BigDecimal, probablement avec BigDecimal.ROUND_HALF_EVEN arrondi.

Edit: Comme Ne mentionne dans sa réponse, il y a des projets open source comme timeandmoney, et tandis que je félicite pour essayer d'empêcher les développeurs d'avoir à réinventer la roue, je n'ai pas assez de confiance dans une pré-alpha de la bibliothèque de l'utiliser dans un environnement de production. En outre, si vous creusez autour de sous le capot, vous verrez qu'ils utilisent BigDecimal trop.

50voto

Il peut être utile pour les gens qui arrivent ici par les moteurs de recherche à savoir sur JodaMoney: http://www.joda.org/joda-money/.

15voto

orbfish Points 1587

Je ne suis pas d'exprimer mon avis ici, mais il y a de très bons arguments contre BigDecimal que quelqu'un devrait probablement jeter:

http://lemnik.wordpress.com/2011/03/25/bigdecimal-and-your-money/

8voto

Bashar Points 118

Une pratique de la bibliothèque que j'ai couru dans les Joda-de l'Argent de la bibliothèque. L'une de ses implémentations est en effet fondée sur la BigDecimal. Il est basé sur la norme ISO-4217 spécification pour les devises et peuvent aider à personnaliser une liste des monnaies (chargé via CVS).

Cette bibliothèque a un petit nombre de fichiers que l'on peut vite passer à travers si des modifications sont nécessaires. Joda-l'Argent est publié sous la licence Apache 2.0.

7voto

Bill K Points 32115

Si vous êtes juste en utilisant des dollars et des cents, je voudrais utiliser un long temps (décalage de 2 décimales). Si vous avez besoin de plus de détail, de gros décimal peut être le chemin à parcourir.

De toute façon, je serais probablement étendre la classe d'avoir un .toString (), qui utilise le format correct, et comme un endroit pour mettre d'autres méthodes qui pourraient se présenter (Pour un long, la multiplication et la division va aller de travers si la virgule n'est pas adapté)

Aussi, si vous utilisez de définir votre propre classe et d'interface, vous pouvez remplacer la mise en œuvre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X