Ruby 为什么我在读取文件时需要在“to_I”之上加上“to_s”?

Ruby 为什么我在读取文件时需要在“to_I”之上加上“to_s”?,ruby,string,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)}"

我从一个文件中读取一个数字
“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
to_i(2)
将字符串中的表达式解释为二进制数,该二进制数应仅由
“0”
“1”
组成。由于
“98”
无效,因此根据设计,默认情况下结果为
0
。(它也可以被设计为返回
nil
或引发错误,但不知为什么它是这样设计的。)

要将一个数字显示为二进制,您需要
到_s(2)
,因为这给出了二进制数字的表达式


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

通常,如果您从文件中读取值,我建议您将它们保存为YAML或JSON。这些值将自动转换回其本机类型,这有助于避免此类混淆@sawa的回答直接解决了您看到的问题,但您可能需要重新考虑如何将数据存储在磁盘上。(照目前的情况,我认为这是一个XY问题,存储才是真正的问题。读取数据将使用正确的存储方法。)嘿,sawa,非常感谢!这正是我需要知道的。我不知道为什么二进制数不能是整数,因为从技术上讲它们是整数,但现在我明白了为什么Ruby拒绝它们。