以红宝石为基值的`to_i`方法

时间:2019-03-05 05:27:51

标签: ruby

任何人都可以通过以下示例解释在调用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 :(得分:6)

'54thousand'.to_i54的原因相同:to_i读取直到找到字符串结尾或无效数字。

在二进制(以2为底)中,唯一有效的数字是01。因此,由于2无效,因此'122'.to_i(2)'1'.to_i(2)相同。另外,'2'.to_i(2)''.to_i(2)相同,在直观上是0

答案 1 :(得分:3)

base,换句话说,Radix表示数字系统中唯一数字的数量。

在十进制中,我们有09,其中10位数字代表数字。
您正在使用2作为参数,这意味着Binary,因此只有01在工作。

Doc of to_i

  

将将str中的前导字符解释为的结果返回   整数基数基数(介于2到36之间)。过去的无关字符   有效数字的末尾将被忽略。如果没有有效的电话号码   str的开始,返回0。这种方法永远不会引起   base有效时会发生异常。

您可以直接在Ruby中使用以下数字表示形式:

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