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?
Réponses
Trop de publicités?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.
Il peut être utile pour les gens qui arrivent ici par les moteurs de recherche à savoir sur JodaMoney: http://www.joda.org/joda-money/.
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/
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.
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.