Как преобразовать целое число в базе в строку - PullRequest
0 голосов
/ 30 мая 2019

Иногда у меня есть целые числа, подобные этим 021 или 011.

Если я попытаюсь преобразовать их в строку, результат будет:

p 021.to_s # "17" instead "021"
p 011.to_s # "9" instead "011"

Почему это происходит и как я могу преобразовать целые числа в строки?

Ответы [ 2 ]

3 голосов
/ 30 мая 2019

Числовые литералы с начальным нулем считаются восьмеричными (основание 8) числами.

Метод to_s преобразует числа в десятичное число по умолчанию (основание 10).

  • 21 восьмеричное - 17 десятичное
  • 11 восьмеричное - 9 десятичное

Для получения ожидаемых результатов удалите ведущие нули.

2 голосов
/ 30 мая 2019

Вы можете обратиться к документации literal , чтобы найти специальные префиксы для записи чисел в десятичном, шестнадцатеричном, восьмеричном или двоичном форматах.

Для десятичных чисел используйте префикс 0d, для шестнадцатеричных чисел - префикс 0x, для восьмеричных чисел - префикс 0 или 0o, для двоичных чисел - префикс 0b. Буквенная составляющая числа не чувствительна к регистру.

21 или 0d21 считается числом в десятичном формате, но 021 считается числом в восьмеричном формате. И когда интерпретируется, чтобы напечатать это, это использует десятичный формат по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...