Преобразование String в BigDecimal с ведущими нулями

Я пытаюсь преобразовать поток ввода в объекты, и у меня возникают проблемы с преобразованием приведенной ниже строки в BigDecimal. Я получаю 87,00, так как 0 игнорируются. Я экспериментирую с DecimalFormat. Любая помощь приветствуется. Спасибо!

Например. 0087 нужно преобразовать в 00.87

Вам нужно добавить разделитель, с которым вы сможете действовать позже

XtremeBaumer 01.03.2019 15:28

Каково правило преобразования? Как узнать, где поставить .? Должен ли он добавлять или удалять некоторые 0 ? И можете ли вы показать нам, что вы пробовали до сих пор?

vincrichaud 01.03.2019 15:28

Ведущие нули не являются свойством, которое BigDecimal имеет или может представлять. Скорее, они являются возможным свойством внешнее представительство, например, в форме String.

John Bollinger 01.03.2019 15:30

@vincrichaud - я бы знал, где разместить файл . с использованием представления фиксированной длины из макета записи. Без добавления/удаления 0. Он не собирается компилироваться, но я экспериментирую с этими строками. Код объекта = "0087"; NumberFormat nf3 = новый DecimalFormat ("00.00"); System.out.println(nf3.format(код));

Mjasmin 01.03.2019 15:38

Ха, кажется, это помогает... BigInteger d = new BigInteger("0084"); BigDecimal один = новый BigDecimal(d, 2); //0,84

Mjasmin 01.03.2019 15:42
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
1 817
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте этот код

 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» — это отдельная проблема, но выполнимая, если это действительно то, что вам нужно.

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