Я пытаюсь преобразовать поток ввода в объекты, и у меня возникают проблемы с преобразованием приведенной ниже строки в BigDecimal. Я получаю 87,00, так как 0 игнорируются. Я экспериментирую с DecimalFormat. Любая помощь приветствуется. Спасибо!
Например. 0087 нужно преобразовать в 00.87
Каково правило преобразования? Как узнать, где поставить .? Должен ли он добавлять или удалять некоторые 0 ? И можете ли вы показать нам, что вы пробовали до сих пор?
Ведущие нули не являются свойством, которое BigDecimal имеет или может представлять. Скорее, они являются возможным свойством внешнее представительство, например, в форме String.
@vincrichaud - я бы знал, где разместить файл . с использованием представления фиксированной длины из макета записи. Без добавления/удаления 0. Он не собирается компилироваться, но я экспериментирую с этими строками. Код объекта = "0087"; NumberFormat nf3 = новый DecimalFormat ("00.00"); System.out.println(nf3.format(код));
Ха, кажется, это помогает... BigInteger d = new BigInteger("0084"); BigDecimal один = новый BigDecimal(d, 2); //0,84




Попробуйте этот код
String str = "0087";
int pos=str.lastIndexOf("0");
String resultat=str.substring(0,pos+1);
resultat+ = ".";
resultat+=str.substring(pos+1);
System.out.println(resultat);
new BigDecimal(resultat);
Вы, кажется, указываете в комментариях, что исходная строка "0087" представляет собой представление с фиксированной точкой с двумя десятичными знаками, поэтому перед последними двумя цифрами существует неявная десятичная точка. Есть несколько способов преобразовать это в соответствующий BigDecimal, но я бы выбрал такой:
BigDecimal result = BigDecimal.valueOf(Long.parseLong("0087"), 2);
Ключевым моментом здесь является понимание того, что BigDecimal имеют два характерных свойства: последовательность десятичных цифр произвольной длины и масштаб, передающий разрядное значение наименее значащей цифры в виде количества цифр справа от десятичная точка. Конкретный фабричный метод, продемонстрированный выше, принимает их как отдельные аргументы, хотя он работает только в том случае, если строка цифр достаточно коротка, чтобы ее можно было представить в виде long. 2 соответствует непосредственно количеству (неявно) дробных цифр в вашем вводе.
Вывод результирующий BigDecimal как «00,87» вместо «0,87» — это отдельная проблема, но выполнимая, если это действительно то, что вам нужно.
Вам нужно добавить разделитель, с которым вы сможете действовать позже