Pourquoi le code suivant déclenche l’exception ci-dessous ?
--
Pourquoi le code suivant déclenche l’exception ci-dessous ?
--
À partir de la docs:
Lorsqu'un MathContext objet est fourni avec une précision de réglage de 0 (pour exemple, MathContext.ILLIMITÉ), les opérations arithmétiques sont exacts, comme sont les méthodes arithmétiques qui ne permet pas de MathContext objet. (C'est le seul comportement qui a été pris en charge dans les versions antérieures à 5.)
En tant que corollaire du calcul du résultat exact, le mode d'arrondi fixation d'un MathContext objet avec une précision de réglage de 0 n'est pas utilisé et donc hors de propos. Dans le cas de la fracture, le quotient exact pourrait avoir un infiniment longue décimal l'expansion; par exemple, 1 divisé par 3.
Si le quotient a un nonterminating décimal expansion et le fonctionnement est spécifié pour retourner un résultat exact, une ArithmeticException est levée. Sinon, le résultat exact de la division est de retour, comme fait pour d'autres opérations.
Pour le fixer, vous avez besoin de faire quelque chose comme ceci:
a.divide(b, 2, RoundingMode.HALF_UP)
where 2 is precision and RoundingMode.HALF_UP is rounding mode
Plus de détails: http://jaydeepm.wordpress.com/2009/06/04/bigdecimal-and-non-terminating-decimal-expansion-error/
Parce que vous n'êtes pas la spécification d'une précision et un arrondi-mode. BigDecimal, on se plaint qu'il pourrait utiliser 10, 20, 5000, ou l'infini de décimales, et ce ne serait pas encore en mesure de vous donner une représentation exacte du nombre. Donc au lieu de vous donner une mauvaise BigDecimal, c'est juste whinges à vous.
Cependant, si vous fournissez un RoundingMode et de précision, il sera en mesure de convertir (par exemple. 1.333333333-de-l'infini à quelque chose comme 1.3333 ... mais vous en tant que programmeur besoin de lui dire quelle précision vous êtes heureux avec'.
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.