Как получить int 0000023?

299
15 января 2017, 15:32

У меня есть задание нужно сделать метод который будет принимать значение и возвращать int

Так вот возвращаемый int должен быть 6 значным числом и суть в том, что если число которое обработал метод в итоге размером всего допустим в 2 знака, то спереди должно добавиться четыре нуля.

Допустим метод в результате дал число 23 , то вернуть он должен 000023

Но int сбрасывает ненужные нули и в итоге все равно 23

Есть возможность получить такое число используя int ?

Answer 1

Если нужно распечатать то вот так

System.out.format("%04d\n", 1);
System.out.format("%07\n", 23);
System.out.format("%04d\n", 84);
System.out.format("%04d\n", 100);

output:

0001
0000023
0084
0100
Answer 2

Нет, потому что это число. Используй строку.

что я должен был увидеть?

Что у чисел не бывает лидирующих нулей. На них всегда в памяти выделено определённое число бит. И среди этих бит нет никакой информации про текстовое представление.

Answer 3

Все-таки можно, если ограничить диапазон хранимых чисел. Тогда число умножить на 10 и сложить с числом лидирующих нулей. По сути дела, используем целую переменную как контейнер для битов значения числа и дополнительной информации (в данном случае числа лидирующих нулей).

Максимальное (и минимальное, т.е. отрицательное) значение, которое можно записать в такую переменную, сокращается в 10 раз.

Только при остальной работе с ним, для получения исходного числа надо не забывать делить на 10, а для получения лидирующих нулей берем остаток от деления на 10.

Небольшой пример (но на Си, поскольку Java под рукой нет)

#include <stdio.h>
#include <stdlib.h>
int zint (int x)
{
  int z = x, n = 1;
  while (z /= 10)
    n++;
  n = (n > 5 ? 0 : 6 - n);
  return (x *= 10) >= 0 ? x + n : x - n;
}
int
main (int ac, char *av[])
{
  int x;
  while (scanf("%d", &x) == 1) {
    int z = zint(x);
    int nz = z < 0 ? -z % 10 : z % 10;
    printf("z = %d  nz: %d num: %d\n", z, nz, z / 10);
    printf("res: %06d\n", z / 10);
  }
}
READ ALSO
Вопрос по Navigation drawer activity

Вопрос по Navigation drawer activity

После создания Navigation drawer activity у нас есть 3 вертикальные полоски и, соответственно меню, а так же, справа, есть три точкиЗачем они нужны-то? Как...

333
Сортировка по нескольким столбцам datagridview

Сортировка по нескольким столбцам datagridview

Как сортировать datagridview по двум столбцам? Данные таблицы заполняются из txt и сами данные в таблице представлены в таком виде ( первая строка...

419
Запрос к BindingSource

Запрос к BindingSource

Есть необходимость выбрать 100 записей пропустив 500Может кто подскажет, можно ли сделать offset и limit для BindingSource?

407
Ошибка при отправке xml в amazon

Ошибка при отправке xml в amazon

Добрый деньПри отправке xml в amazon выдаётся ошибка:

387