比较数字及其字符串表示

时间:2009-08-02 20:52:44

标签: ruby string comparison

val1 = 1
val2 = "1"

if val1 == val2 #< Question is in this line
end

如何比较数字及其字符串表示?

4 个答案:

答案 0 :(得分:30)

将其转换为另一个,所以:

val1.to_s == val2 # returns true

或者:

val1 == val2.to_i # returns true

虽然ruby是dynamically typed(类型在运行时已知),但它也是strongly typed(类型不会隐式地进行类型转换)

答案 1 :(得分:3)

假设您不知道其中任何一个是nil,字母数字字符串还是空字符串,我建议将两边都转换为字符串然后进行比较。

val1.to_str    == val2.to_str => true
nil.to_str     == "".to_str   => true
"ab123".to_str == 123.to_str  => false

答案 2 :(得分:0)

这个问题的一个重要补充:

Integer(val1) == Integer(val2)

我来到这里寻找一个简短的解决方案,而不是明确的,但据我所知,这是最安全的方式。

Integer("123a") # ArgumentError: invalid value for Integer(): "123a"

答案 3 :(得分:0)

finishing_moves gem有一个#same_as方法,无需进行任何类型转换即可执行比较。

val1 = 1
val2 = "1"

val1.same_as val2
# => True

val2.same_as val1
# => True