ruby中数字和字符串的比较

时间:2015-03-02 16:59:18

标签: ruby ruby-on-rails-3

在控制台中:

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

为什么这种治疗方法存在差异?如何在基本数字但用零填充的字符串值之间进行比较?

3 个答案:

答案 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。