代码之家  ›  专栏  ›  技术社区  ›  Mike Chaliy

比较数字及其字符串表示形式

  •  14
  • Mike Chaliy  · 技术社区  · 15 年前
    val1 = 1
    val2 = "1"
    
    if val1 == val2 #< Question is in this line
    end
    

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

    4 回复  |  直到 8 年前
        1
  •  29
  •   Sinan Taifour    15 年前

    将其中一个转换为另一个,因此:

    val1.to_s == val2 # returns true
    

    或:

    val1 == val2.to_i # returns true
    

    尽管Ruby是 dynamically typed (类型在运行时已知),它还 strongly typed (类型没有隐式类型转换)

        2
  •  3
  •   Aaron Rustad    15 年前

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

    val1.to_str    == val2.to_str => true
    nil.to_str     == "".to_str   => true
    "ab123".to_str == 123.to_str  => false
    
        3
  •  0
  •   Frans    10 年前

    这个问题的重要补充:

    Integer(val1) == Integer(val2)
    

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

    Integer("123a") # ArgumentError: invalid value for Integer(): "123a"
    
        4
  •  0
  •   Frank Koehl    8 年前

    这个 finishing_moves 宝石有 #same_as 方法,在不进行任何类型转换的情况下执行比较。

    val1 = 1
    val2 = "1"
    
    val1.same_as val2
    # => True
    
    val2.same_as val1
    # => True