Метод to_i с базовым значением в качестве параметра в ruby - PullRequest
0 голосов
/ 05 марта 2019

Может кто-нибудь объяснить, как работает базовый параметр при вызове to_i на следующих примерах?

'2'.to_i(2) #=> 0
'3'.to_i(2) #=> 0
'12'.to_i(2) #=> 1
'122'.to_i(2) #=> 1
'20'.to_i(2) #=> 0
'21'.to_i(2) #=> 0

Я не понимаю, как он на самом деле работает.Кто-нибудь может объяснить, пожалуйста?

Ответы [ 2 ]

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

base, другими словами Radix означает количество уникальных цифр в системе счисления.

В десятичном формате мы имеем от 0 до 9, от 10 цифр допредставляют числа.
Вы используете 2 в качестве параметра, что означает Binary , поэтому работают только 0 и 1.

Из Документа to_i :

Возвращает результат интерпретации начальных символов в str как целочисленную базовую базу (от 2 до 36).Посторонние символы после конца действительного числа игнорируются.Если в начале str нет действительного номера, возвращается 0.Этот метод никогда не вызывает исключение, когда база действительна.

Вы можете использовать эти числовые представления непосредственно в Ruby:

num_hex = 0x100
#=> 256
num_bin = 0b100
#=> 4
num_oct = 0o100
#=> 64
num_dec = 0d100
#=> 100
0 голосов
/ 05 марта 2019

Это та же самая причина, по которой '54thousand'.to_i равен 54: to_i читает, пока не найдет конец строки или недопустимую цифру.

В двоичном (основание 2) единственными действительными цифрами являются0 и 1.Таким образом, поскольку 2 недопустимо, '122'.to_i(2) идентично '1'.to_i(2).Кроме того, '2'.to_i(2) идентичен ''.to_i(2), что довольно интуитивно 0.

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