`在ruby中以基值作为参数的to_i`方法

`在ruby中以基值作为参数的to_i`方法,ruby,Ruby,有人能用下面的例子解释一下在调用到_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 我不明白它到底是怎么工作的。有人能解释一下吗?这和'54000'的原因是一样的。to_i是54:to_i读取,直到找到字符串的结尾或无效数字 在二进制(基数2)中,唯一有效

有人能用下面的例子解释一下在调用
到_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

我不明白它到底是怎么工作的。有人能解释一下吗?

这和
'54000'的原因是一样的。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
base
,换句话说,是指数字系统中的唯一位数

在十进制中,我们有
0
9
,10位数字表示数字。
您使用
2
作为参数,这意味着只有
0
1
在工作

从:

返回将
str
中的前导字符解释为 整数基数(介于2和36之间)。过去的外来人物 忽略有效数字的结尾。如果在上没有有效的数字 返回
str
0
的开头。这种方法永远不会引起争议 基有效时发生异常

您可以直接在Ruby中使用这些数字表示:

num_hex = 0x100
#=> 256
num_bin = 0b100
#=> 4
num_oct = 0o100
#=> 64
num_dec = 0d100
#=> 100

“2”。to#i#=>2
2。to#s(2)#=>10
“10”。to#i(2)#=>2
2.to#s=“2”
。在这种情况下,您应该使用
Integer(x,2)
而不是
x.to#i(2)
。后者永远不会抛出错误,但它也可能没有执行您想要的操作。API文档中描述了这种行为@2017kamb如果您对方法行为感到困惑,阅读API文档总是一个好主意。相反,
'54000'。to_i(36)
返回521395291927273,因为它实际上将所有字符解释为36位基数。