Создание BigInteger из String и добавление к нему "0" - PullRequest
0 голосов
/ 09 марта 2019
[InputParam1:Decimal Number in String format(for Eg:30),
 InputParam2:Integer to denote number of repeating 0's to append(for Eg:6)]

Для преобразования числа из десятичного числа в двоичное и начальных чисел в его переднюю часть мне нужно выполнить следующие шаги:

Шаг 1: BigInteger binary=new BigInteger(InputParam1,2); -> Это работает, когда я определяю BigInt с базой 16 (что я только что попробовал, когда base2 не удалось), но не с базой 2, как описано выше. Выдает исключение числового формата.

Шаг 2: String pad=StringUtils.repeat("0",InputParam2); (повторить 0 'InputParam2' количество раз) -> Это прекрасно работает

Шаг 3: Необходимо добавить площадку перед двоичным файлом (из шага 1) Для BigInteger я не могу получить что-то похожее на .append. Поэтому я пытаюсь а) преобразовать это число BigInteger в строку и б) добавить площадку в) преобразовать обратно в BigInteger (этот шаг я не смогу получить без создания нового BigInteger)

Любые указатели на Step1 и Step3-c будут полезны, пожалуйста.

1 Ответ

1 голос
/ 10 марта 2019

# 1 - Вы не сказали, какое значение вы передаете InputParam1 , но я предполагаю, что вы передаете что-то отличное от строки, содержащей только «0» в «1» персонажи. Параметр 'radix' для конструктора сообщает коду, как интерпретировать строку, которую вы ему передаете. Это прекрасно работает для меня:

BigInteger binary=new BigInteger("1000",2);
System.out.println(binary);

То, как вы строите число, не имеет ничего общего с тем, как вы в конечном итоге захотите представлять или отображать это число. Ключевая идея здесь заключается в том, что представление числа (шестнадцатеричное, десятичное, двоичное) не имеет ничего общего с самим числом, так же как начальные нули не влияют на значение числа. 1111 двоичный, f шестнадцатеричный и 15 десятичный - все одно и то же число. Если вы передадите три из них в конструктор BigDecimal с основанием 2 , 16 и 10 соответственно, вы получите ТОЧНО ту же вещь в каждый случай. Объект потеряет представление о том, какой тип представления вы использовали для установки его начального значения.

# 3. Не существует понятия числа (int, BigInteger и т. Д.) С нулевым заполнением спереди, равно как и понятия, какое основание / основание вы можете использовать для визуального представления числа. Вы можете думать об этом концептуально, но это просто способ отображения числа. Это не имеет ничего общего с самим номером.

Я не пробовал раньше, но, похоже, нет супер простого способа отформатировать двоичное значение в Java с ведущими 0, как для десятичного и шестнадцатеричного, поскольку String.format () не дает формат спецификатор для двоичного файла. Согласно этому сообщению StackOverflow Как получить двоичное представление целого числа в java с добавлением 0-отступов? , кажется, это лучший способ, преобразовав наиболее приемлемый ответ для работы с BigInteger:

String str = String.format("%16s", binary.toString(2)).replace(' ', '0');

Итак, вот весь мой пример кода с выводом:

BigInteger binary=new BigInteger("1000",2);
System.out.println(binary);
String str = String.format("%16s", binary.toString(2)).replace(' ', '0');
System.out.println(str);

Выход:

8
0000000000001000
...