任何人都可以通过以下示例解释在调用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
我不知道它实际上是如何工作的。谁能解释一下?
答案 0 :(得分:6)
与'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
。
答案 1 :(得分:3)
base
,换句话说,Radix表示数字系统中唯一数字的数量。
在十进制中,我们有0
至9
,其中10位数字代表数字。
您正在使用2
作为参数,这意味着Binary,因此只有0
和1
在工作。
将将
str
中的前导字符解释为的结果返回 整数基数基数(介于2到36之间)。过去的无关字符 有效数字的末尾将被忽略。如果没有有效的电话号码str
的开始,返回0
。这种方法永远不会引起 base有效时会发生异常。
您可以直接在Ruby中使用以下数字表示形式:
num_hex = 0x100
#=> 256
num_bin = 0b100
#=> 4
num_oct = 0o100
#=> 64
num_dec = 0d100
#=> 100