Разъяснение поведения BigDecimal.stripTrailingZeroes()

Почему следующий код печатает 0.00, а не 0?

BigDecimal big = new BigDecimal("0.00");
big = big.stripTrailingZeros();
System.out.println(big.toPlainString());

Ниже приведена документация для stripTrailingZeroes:

Returns BigDecimal which is numerically equal to this one but with any trailing zeros removed from the representation. For example, stripping the trailing zeros from the BigDecimal value 600.0, which has [BigInteger, scale] components equals to [6000, 1], yields 6E2 with [BigInteger, scale] components equals to [6, -2]

Returns:
a numerically equal BigDecimal with any trailing zeros removed.

person Leonid    schedule 08.03.2011    source источник
comment
@eznme: исправлено, здесь уже слишком поздно :))   -  person Leonid    schedule 09.03.2011
comment
Это похоже на ошибку для меня. Удивительно, но в Java Compatibility Kit для Java 1.6 вообще не упоминается функция stripTrailingZeros. Ну разве что метод должен существовать, но не более того.   -  person Roland Illig    schedule 09.03.2011
comment
Какова обычно процедура сообщения о предполагаемых проблемах с библиотеками Java?   -  person Leonid    schedule 09.03.2011


Ответы (2)


Он удаляет конечные нули внутреннего представления [6000,1] и соответствующим образом адаптирует масштаб 1 -> -2. Внутреннее представление также в некоторой степени не зависит от окончательной распечатки, на которую также влияют формат, округление и язык.

person Bernd Elkemann    schedule 08.03.2011
comment
Почему toPlainString зависит от format и locale? Режим округления используется для divide, поэтому я не думаю, что он каким-либо образом влияет на toPlainString. На самом деле, из исходного кода toPlainString тоже не похоже, что это так. - person Leonid; 09.03.2011
comment
Я не имею в виду toPlainString. Я имею в виду форматированный вывод; в производстве вы редко можете использовать toPlainString, обычно вам нужно соблюдать определенный формат, например 1234,567, 123E45 или 0,123 * 10 ** 7; и вы не можете переключаться между ними. - person Bernd Elkemann; 09.03.2011

Я думаю, что это ошибка: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6480539

person Neil    schedule 02.09.2011