62 votes

Java:Pourquoi devrions-nous utiliser BigDecimal au lieu de deux dans le monde réel?

Lorsque vous traitez avec le monde réel des valeurs monétaires, je suis conseillé d'utiliser BigDecimal au lieu du Double.Mais je n'ai pas une explication convaincante à l'exception de, "Il est normalement fait de cette façon".

Pouvez-vous s'il vous plaît jeter la lumière sur cette question?

43voto

Cela s'appelle une perte de précision et est très perceptible lors de l'utilisation de très grands nombres ou de très petits nombres. La représentation binaire des nombres décimaux avec un radix est dans de nombreux cas, une approximation et non une valeur absolue. Pour comprendre pourquoi vous avez besoin de lire sur flottant de la représentation des nombres en binaire. Voici un lien: http://en.wikipedia.org/wiki/IEEE_754-2008. Voici une petite démonstration:
en colombie-britannique (Une précision arbitraire calculateur de la langue), avec précision=10:

(1/3+1/12+1/8+1/30) = 0.6083333332
(1/3+1/12+1/8) = 0.541666666666666
(1/3+1/12) = 0.416666666666666

Java double:
0.6083333333333333
0.5416666666666666
0.41666666666666663

Java float:

0.60833335
0.5416667
0.4166667


Si vous êtes une banque et sont responsables de milliers de transactions chaque jour, même si ils ne sont pas des vers et à partir d'un seul et même compte (ou peut-être qu'ils sont), vous devez disposer de chiffres fiables. Binaire flotteurs ne sont pas fiables - pas moins de comprendre comment ils fonctionnent et leurs limites.

33voto

Peter Lawrey Points 229686

Alors que BigDecimal peut stocker plus de précision que le double, ce n'est généralement pas nécessaire. La vraie raison est utilisé car il indique clairement la façon dont l'arrondi est effectué, y compris un certain nombre de différentes arrondissement stratégies. Vous pouvez obtenir les mêmes résultats avec double dans la plupart des cas, mais à moins que vous connaissez les techniques nécessaires, BigDecimal est la voie à suivre dans ces cas.

Un exemple courant, c'est de l'argent. Même si l'argent ne va pas être assez grand pour avoir besoin de la précision de BigDecimal dans 99% des cas d'utilisation, il est souvent considéré comme la meilleure pratique à utiliser BigDecimal, car le contrôle de l'arrondissement est le logiciel qui permet d'éviter le risque que le développeur va faire une erreur dans la manipulation de l'arrondissement. Même si vous êtes confiant, vous pouvez gérer arrondissant double je vous suggère d'utiliser les méthodes d'aide à effectuer l'arrondi qui vous tester à fond.

1voto

Sai Points 2605

Ceci est principalement fait pour des raisons de précision. BigDecimal stocke des nombres à virgule flottante, avec un nombre illimité de précision. Vous pouvez prendre un coup d'oeil à cette page qui l'explique bien. http://blogs.oracle.com/CoreJavaTechTips/entry/the_need_for_bigdecimal

-1voto

Jason Points 65

Lorsque BigDecimal est utilisé, il peut stocker beaucoup plus de données Double, ce qui le rend plus précis, et juste un tout autour de meilleur choix pour le monde réel.

Bien qu'il est beaucoup plus lente et plus, ça vaut le coup.

Parie que vous ne voulez pas donner votre patron inexactes info, hein?

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