Il risultato effettivo è 37.1465555388 la cui scala deve essere 10 per essere esatta.
Quello che dice JavaDoc è che la scala preferita è la differenza, il che significa che se il risultato non ha effettivamente bisogno di essere 10, allora proverebbe a farlo 8. Ad esempio se si sarebbe diviso per 2, di cui anche la scala è 0, il risultato sarebbe stato 18573277.76940000 (scala 8).
EDIT: piccolo adition - è possibile forzare la divisione di una certa scala utilizzando i metodi divide overload:
divide(BigDecimal, RoundingMode)
che darà una BigDecimal
con scala this
e valore arrotondato con il metodo di arrotondamento specificato se il risultato avesse effettivamente bisogno di più decimali per essere esatti.
divide(BigDecimal, scale, RoundingMode)
che darà un BigDecimal
con la scala specificata e il valore arrotondato con il metodo specificato se necessario.
Questo potrebbe essere utile se il dividendo per un numero si sa può causare ripetere decimali, come 3 (1/3 = 0,333,333 mila ...) in quanto, se ciò accade, la semplice divisione genererà un'eccezione. Limitare il numero massimo di decimali ti aiuterà a evitare l'eccezione, ma renderà i calcoli meno precisi.
fonte
2010-07-21 20:33:32