BigDecimal
имеет столько точности, сколько хотите.double
имеет 53 бита с двоичной точностью, что составляет ~ 15,9 десятичных цифр.Поэтому каждый раз, когда ваш BigDecimal
имеет> 16 значащих цифр, из-за которых вы теряете точность при преобразовании в double
.
[Это относится к целочисленным значениям.Ситуация с дробями значительно сложнее, но факт остается фактом: BigDecimal
имеет неограниченную точность, а double
- нет.]
Также double
имеет минимальные и максимальные значения, заданные Double.MIN_VALUE/MAX_VALUE
,BigDecimal
не имеет ни того, ни другого.