Когда происходит потеря данных при конвертации из BigDecimal в Double в Java - PullRequest
0 голосов
/ 25 апреля 2018

Я знаю, что есть проблемы с точностью при преобразовании значений BigDecimal в Double в Java. Когда происходит «потеря данных» при простом преобразовании из BigDecimal в Double с помощью BigDecimal.doubleValue ()? Например, если я преобразую 1.1 из BigDecimal в Double и распечатаю его, он напечатает «1.1», который я бы посчитал без потери данных (BigDecimal был 1.1, а напечатанное значение было 1.1). В каких случаях эти два значения не будут одинаковыми при простом преобразовании из BigDecimal в Double таким образом?

1 Ответ

0 голосов
/ 25 апреля 2018

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

[Это относится к целочисленным значениям.Ситуация с дробями значительно сложнее, но факт остается фактом: BigDecimal имеет неограниченную точность, а double - нет.]

Также double имеет минимальные и максимальные значения, заданные Double.MIN_VALUE/MAX_VALUE,BigDecimal не имеет ни того, ни другого.

...