El resultado real es 37.1465555388, cuya escala debe ser 10 para que sea exacto.
Lo que JavaDoc dice es que la escala preferida es la diferencia, lo que significa que si el resultado no necesita ser realmente 10, entonces trataría de hacerlo 8. Por ejemplo, si hubieras dividido por 2, la escala también es 0, el resultado hubiera sido 18573277.76940000 (escala 8).
EDIT: pequeña adition - puede forzar la división de una escala determinada mediante el uso de los métodos de dividir sobrecargados:
divide(BigDecimal, RoundingMode)
que dará un BigDecimal
con escala de this
y el valor redondeado utilizando el método de redondeo especificado si el resultado realmente necesitaría más decimales para ser exactos.
divide(BigDecimal, scale, RoundingMode)
que dará un BigDecimal
con escala especificada, y el valor redondeado por el método especificado si es necesario.
Esto podría ser útil si su división por un número que sabe puede causar decimales periódicos, al igual que 3 (1/3 = 0.333333 ...) ya que, si eso sucede, el simple división lanzará una excepción. Limitarlo a un número máximo de decimales lo ayudará a evitar la excepción, pero hará que sus cálculos sean menos precisos.