在控制台中:
1.9.3p547 :010 > my_s = 00013.to_s
=> "11"
1.9.3p547 :011 > my_s = 00013.to_i
=> 11
1.9.3p547 :012 > 13.to_s
=> "13"
1.9.3p547 :013 > 13.to_i
=> 13
为什么这种治疗方法存在差异?如何在基本数字但用零填充的字符串值之间进行比较?
答案 0 :(得分:6)
你写了00013
,带有前导零。在Ruby(以及许多其他语言)中,以零开头的整数文字被视为八进制(基数为8),因此您键入的数字(以十进制表示)实际上是8 + 3 = 11.
回答你问题的第二部分:如果你有一个像'00013'
这样的字符串,你可以在其上调用#to_i
,Ruby实际上会将它转换为13(十进制)。所以这应该允许你进行比较。
答案 1 :(得分:0)
在Ruby的Integer
类中,不存储前导零。
前导零是数字文字并且被解释为如此
Octal
:0,0 0
Hexadecimal
:0,0x
Binary
:0b
Decimal
:0d
' 00013'有三个前导零,并匹配格式0o
。 IRB将这些数字视为八进制(基数为8)
答案 2 :(得分:0)
您没有任何"字符串值,这些值基本上是数字,但是已用零填充"在你的例子中。如果你这样做了,它实际上会如你所愿:
"00013".to_i
# => 13
您的示例中有一个用零填充的数字文字。正如其他答案所说,这被红宝石视为八进制表示。
但是如果你实际上有一个数字的字符串表示,用零填充,它工作正常,只需在其上调用#to_i。