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
Il n'y a pas de mode "correct", cela dépend de l'analyse de rentabilisation. Exemples:
RoundingMode.FLOOR
).RoundingMode.CEILING
).HALF_UP
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.
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.
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.
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.