web-dev-qa-db-fra.com

Quel mode d'arrondi utiliser pour la manipulation de devises en java?

J'ai lu sur Java site pour utiliser BigDecimal pour les devises. http://docs.Oracle.com/javase/tutorial/Java/nutsandbolts/datatypes. html

Mais avec quel mode d'arrondi devrions-nous utiliser? qui est le plus approprié et le plus largement nous

44
Ahsan Abid

Il n'y a pas de mode "correct", cela dépend de l'analyse de rentabilisation. Exemples:

  • Lors du calcul des impôts annuels, les fractions sont souvent coupées (RoundingMode.FLOOR).
  • Lors du calcul d'un bonus, vous souhaiterez peut-être toujours arrondir en faveur du client (RoundingMode.CEILING).
  • Pour les taxes sur une facture, vous arrondissez généralement HALF_UP
  • Lorsque vous effectuez des simulations financières complexes, vous ne voulez pas du tout arrondir.

documentation de RoundingMode contient de nombreux exemples de fonctionnement des différents modes.

Pour obtenir une meilleure réponse, vous devez nous dire ce que vous souhaitez réaliser.

Cela dit, BigDecimal est le type correct à utiliser dans Java car il peut conserver une certaine précision et vous permet de choisir le mode d'arrondi le plus adapté à votre cas.

49
Aaron Digulla

La plupart du temps, BigDecimal est le seul choix valable pour les devises. Mais le choix de la stratégie d'arrondi n'est pas si évident.

La valeur par défaut est HALF_EVEN qui se trouve être un bon choix. Cet algorithme est appelé arrondi des banquiers (voir la discussion ici ).

Une autre stratégie courante est HALF_UP qui est plus intuitive mais a des caractéristiques statistiques légèrement pires.

Notez également que dans de nombreux cas (en particulier dans le secteur bancaire et les assurances), la stratégie d'arrondi sera dictée par les besoins de l'entreprise, souvent différents pour différents cas d'utilisation.

18
Tomasz Nurkiewicz

En règle générale, vous utilisez l'arrondi "à moitié supérieur", comme ceci:

myBigDecimal.setScale(2, RoundingMode.HALF_UP);

De cette façon, vous arrondirez à deux décimales (que la plupart des devises utilisent, par exemple les dollars et les cents, il y a évidemment des exceptions), et vous arrondirez des valeurs telles qu'un demi-cent ou plus arrondira tandis que moins d'un demi-cent arrondira. Voir le javadoc pour plus de détails.

11
Amos M. Carpenter

Pour les applications financières, ROUND_HALF_EVEN est le mode d'arrondi le plus courant. Ce mode évite les biais. Mais pour l'affichage, vous devez utiliser la classe NumberFormat. Cette classe s'occupera des problèmes de localisation pour les montants dans différentes devises. Mais NumberFormat accepte uniquement les primitives. Utilisez donc le dernier si vous pouvez accepter un petit changement de précision dans les transformations vers un double.

4
Sqeezer