Проблема с java BigDecimal, хранящей значение мусора
BigDecimal b = new BigDecimal(0.05);
System.out.println(b);
Выход:
0.05000000000000000277555756156289135105907917022705078125
Как справиться с этим?
2 ответа
Номер строго правильный. Это точное значение 0,05 как двойное значение. Это потому что double
не может представлять все значения точно и вместо этого должен дать вам самое близкое представимое значение. Когда вы печатаете значение, оно предполагает, что вы хотите округлить его, и скрывает ошибку представления. BigDecimal просто показывает вам, каково значение на самом деле.
Если вы хотите конвертировать из двойного в BigDecimal и сделать так, как вы ожидаете, используйте
BigDecimal b = BigDecimal.valueOf(0.05);
Другое решение - не использовать BigDecimal. Если вы используете double
при соответствующем округлении вы получите тот же ответ, с гораздо меньшим количеством кода и намного более быстрым кодом.
Преобразуйте это в это
BigDecimal b = new BigDecimal("0.05");
когда вы проходите 0.05
это по умолчанию double
значение, и именно так оно представляется в двойном