Проблема с 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 значение, и именно так оно представляется в двойном

Другие вопросы по тегам