Преобразование большого десятичного числа в формат ###. # - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь сделать так, чтобы число в переменной BigDecimal соответствовало формату ###. #, Где независимо от того, какое число передано, оно будет выглядеть как ###. #

Например, еслиМне передали число 1 в переменной BigDecimal, метод вернул бы 001.0

Если мне передали 11.1 в качестве переменной BigDecimal, метод вернул бы 011.1

У меня уже есть немного кода длясделать совпадение десятичных разрядов

BigDecimal x = new BigDecimal(1); DecimalFormat df = new DecimalFormat("#.0"); String formatted = df.format(x);

Таким образом, это вернет 1.0, однако я не могу понять, как заставить начальные нули появляться перед преобразованием обратно в BigDecimal.

Можеткто-нибудь поможет мне или направит меня в правильном направлении?

Спасибо всем

Ответы [ 3 ]

0 голосов
/ 02 марта 2019

Используйте экземпляр NumberFormat, с Locale, в котором в качестве десятичного разделителя используется точка .

final BigDecimal x = new BigDecimal("11.1");

final NumberFormat nf = NumberFormat.getNumberInstance(Locale.ENGLISH);
nf.setMinimumFractionDigits(1);
nf.setMaximumFractionDigits(1);
nf.setMinimumIntegerDigits(3);

final String formatted = nf.format(x);

NumberFormat - это в основном фабрика, например, вв этом случае базовым форматером, возвращаемым getNumberInstance, является DecimalFormat.Я всегда предпочитаю абстрагироваться от реальной реализации.

Вы также можете решить, хотите ли вы отображать групповую запятую или нет.

nf.setGroupingUsed(true);   // 123,456.0 - default value is true
nf.setGroupingUsed(false);  // 123456.0
0 голосов
/ 02 марта 2019

Использование new DecimalFormat("000.0")

Примеры

DecimalFormat df = new DecimalFormat("000.0", DecimalFormatSymbols.getInstance(Locale.US));
System.out.println(df.format(new BigDecimal("1")));       // prints: 001.0
System.out.println(df.format(new BigDecimal("11.1")));    // prints: 011.1
System.out.println(df.format(new BigDecimal("123.456"))); // prints: 123.5
System.out.println(df.format(new BigDecimal(".07")));     // prints: 000.1
System.out.println(df.format(new BigDecimal("123456")));  // prints: 123456.0
0 голосов
/ 02 марта 2019

Вы можете использовать StringUtils из apache.

StringUtils.leftPad(number.toString(), 3, '0');

Где первый аргумент - это строка для форматирования, второй аргумент - это количество оставленных мест для проверки, а последний аргумент - это символ длязавершено.

Reggards.

...