为什么数字字符串比较会产生意外结果?

时间:2014-03-19 02:28:28

标签: ruby string

'10:' < '1:'
# => true

有人可以解释一下为什么上面例子中的结果是真的吗?如果我只是比较'1:'和'2:'我会得到预期的结果:

'1:' < '2:'
# => true

4 个答案:

答案 0 :(得分:2)

字符串逐字符比较。

当您比较1:2:时,比较从21开始,比较将在此处停止并显示预期结果。

当您比较1:10:时,比较从1 vs 1开始,由于它是平局,比较将继续进行下一次比较,这是: vs 0,并且比较在那里停止,结果是您发现了令人惊讶的结果(假设您希望比较字符串中的整数)。

要进行预期的比较,请使用to_i将两个操作数转换为整数。

答案 1 :(得分:1)

ASCII中的字符比较。

'10:' < '1:'(49 < 49) || (48 < 58) || (58 < ?)

#=> true

'1:' < '2:'(49 < 50) || (58 < 58)

#=> true

使用从左到右的布尔检查,并检查在哪里找到true的中断。

注意:这只是我对各种示例模式的观察。

答案 2 :(得分:0)

两个字符串中每个字符串的第一个字符是相同的。正如Dave在评论中所说,第一个字符'0'的第二个字符小于':',所以第一个字符串小于第二个字符。

答案 3 :(得分:0)

因为0的ASCII码是48,小于:的ASCII码,即58。