当从文件中读取时,为什么在`to_i`之上需要`to_s`?

时间:2016-01-14 15:46:19

标签: ruby string

我从文件中读取了一个数字"98",并尝试使用input.to_i(2)将其转换为二进制文件,但我得到了0

input=File.read("input.dat")
puts "Input is: #{input}"
puts "Normal way is #{input.to_i(2)}"
puts "It works this way #{input.to_i.to_s(2)}"
puts "Calling the number directly works #{98.to_s(2)}"

输出是:

Input is: 98
Normal way is 0
It works this way 1100010
Calling the number directly works 1100010

1 个答案:

答案 0 :(得分:6)

Sand%EDa.jpg将字符串中的表达式解释为二进制数,该数字应仅由to_i(2)"0"组成。由于"1"无效,因此默认情况下,设计结果为"98"。 (它可能会被设计为返回0或引发错误,但不知何故,它是以这种方式设计的。)

要将数字显示为二进制,您需要nil,因为它以二进制形式给出数字的表达式。

作为一个数字,二进制数,十进制数等没有区别。所有都有一个数字。这些二进制,十进制等概念的含义是它们表示为字符串的方式。