new BigDecimal("37146555.53880000").divide(new BigDecimal("1000000")).scale() This returns 10. But according to the API, the divide method: Returns a BigDecimal whose value is (this / divisor), and whose preferred scale is (this.scale() - divisor.scale()); So in this case, 37146555.53880000's scale is 8, and 1000000's scale is 0. So the result should have a scale of 8, not 10.What am I missing here?Thanks
3 Réponses :
Il dit "L'échelle préférée" non "sera définitivement une échelle". p>
Être absolument sûr, j'utiliserais bigdecimal.divide (bigdecimal, int, int) code>
. P>
Ces échelles sont celles utilisées par le méthodes qui renvoient une arithmétique exacte résultats;
sauf qu'un division exact peut avoir à utiliser une plus grande échelle forte> depuis Le résultat exact peut avoir plus de chiffres. Par exemple, 1/32 est 0,03125. P> blockQuote>
Le résultat réel est 37.1465555388 dont l'échelle doit être 10 pour qu'elle soit exacte. P>
Qu'est-ce que le Javadoc dit est que l'échelle préférée est la différence qui signifie que si le résultat n'avait pas besoin d'être 10, il essaierait de le faire 8. Par exemple, si vous auriez divisé par 2, dont l'échelle est également 0, le résultat aurait été 18573277.76940000 (échelle 8). P>
EDIT: Petite récitation - Vous pouvez forcer la division à une certaine échelle en utilisant les méthodes de fracture surchargées: p>
Ceci pourrait être utile si votre division par un numéro que vous connaissez peut causer des décimales répétées, comme 3 (1/3 = 0,3333333 ...) car, si cela se passe, la division simple lancera une exception. La liaison à un nombre maximal de décimales vous aidera à éviter l'exception mais rendra vos calculs moins précis. P> Divide (BigDecimal, RoundingMode) code> qui donnera un
BigDecimal CODE> avec l'échelle de
Ceci code> et la valeur arrondie à l'aide de la méthode d'arrondi spécifiée Si le résultat aurait réellement besoin de plus de décimales pour être exact. p> li>
diviser (bigdecimal, échelle, rondingmode) code> qui donnera un
bigdecimal code> avec une échelle spécifiée et une valeur arrondie par méthode spécifiée si nécessaire. P> li>
ul>
Existe-t-il une formule pour déterminer comment l'échelle de résultat sera?
Si cette valeur.Scale () est inférieure à la diviseur.scale () alors?