DecimalFormat - без десятичного разделителя

Я использую класс DecimalFormat для форматирования числа в строки и наоборот.

В моей базе данных двойники Java представлены особым образом: например, 128,88 хранится как «00012888». Для этого я использую шаблон «00000.00» и удаляю символ «.» десятичный разделитель после форматирования, что не является разумным решением.

Есть ли способ запретить DecimalFormat использовать десятичный разделитель? Могу ли я объяснить, где целая и дробная части в строке, представляющей десятичное число?

Я бы предпочел не умножать, делить, усекать или округлять перед преобразованием. Есть ли для этого волшебный узор? Или класс DecimalFormat не такой гибкий?

Я точно не могу использовать метод String.format (), потому что работаю на платформе Java 1.4.

Спасибо за вашу помощь.


person mishka    schedule 03.05.2012    source источник
comment
Разве вы не можете изменить столбец базы данных на DECIMALS(9, 2)? Все равно бы без точки хранились, а было бы нормальнее. Кроме того, BigDecimal очень неудобно, но лучше, чем double. Вы можете создать представление с правильным определением столбца и просто getDouble или getBigDecimal.   -  person Joop Eggen    schedule 03.05.2012
comment
нет, к сожалению. Но BigDecimal кажется неплохим решением. Спасибо !   -  person mishka    schedule 03.05.2012


Ответы (2)


DecimalFormat недостаточно силен для этого.

Вы можете использовать такой метод:

double getD(String fixedWidthNumber) {
    return Double.valueOf(fixedWidthNumber.substring(0,6)+"."+fixedWidthNumber.substring(6,8));
}
person Angelo Fuchs    schedule 03.05.2012

BigDecimal value = new BigDecimal("234.33");
DecimalFormat decFrm = new DecimalFormat("000.00");
char decSep = decFrm.getDecimalFormatSymbols().getDecimalSeparator();
String resultStr = decFrm.format(value).replace(Character.toString(decSep), "");

результат: 3423433

person Sprinter    schedule 18.03.2016