我有两个不同长度的数字:
"103"
和"11"
在irb:
2.1.1 :005 > "11" > "103"
=> true
2.1.1 :006 > "11" < "103"
=> false
为什么会这样?我知道我可以为每个字符串.to_i
,但如果这是一个rails类型为字符串的rails查询,我可以做些什么呢?
答案 0 :(得分:6)
字符串按lexicographically排序,这意味着&#34; 1&#34;来自&#34; 0&#34;和&#34; 103&#34;来自&#34; 11&#34;,之前&#34; 1122344&#34;,之前&#34; 1abc&#34;。
你无法将字符串比作数字,你需要先将它们解析为数字。
我能想到的唯一方法是确保在将它们变成字符串之前填充足够的零:"000103", "000011"
...
答案 1 :(得分:2)
正在逐字逐句地比较字符串。因此'11' > '103'
执行会在第二个字符上停止并返回true,因为'1'.chr > '0'.chr
答案 2 :(得分:1)
他们是字符串。它们按String#ord
值进行比较。
所以'1'.ord # => 49
和'0'.ord # => 48
。这就是为什么
'11' > '10' # => true
# and
'11' > '100' # => true
以及
'b' > 'a' # => true
'a'.ord # => 97
'b'.ord # => 98
# and
'b' > 'aaaaa' # => still true