使用>;(大于号)在Ruby中?
我在一个项目中遇到了一段代码,看起来有点吓人。它应该显示两个数字之间的+/-增量,但它使用使用>;(大于号)在Ruby中?,ruby,string,compare,Ruby,String,Compare,我在一个项目中遇到了一段代码,看起来有点吓人。它应该显示两个数字之间的+/-增量,但它使用来比较数字字符串而不是数字 我假设代码目前正在按预期工作,所以我只是想了解Ruby在本例中是如何比较这些字符串的 下面是一个替换了变量的示例: if '55.59(100)' > '56.46(101)' delta = '+' else delta = '-' end String包括Comparable模块,该模块基于基类的compare()方法定义、=)等。因此,如果字符串a按字母顺序
来比较数字字符串而不是数字
我假设代码目前正在按预期工作,所以我只是想了解Ruby在本例中是如何比较这些字符串的
下面是一个替换了变量的示例:
if '55.59(100)' > '56.46(101)'
delta = '+'
else
delta = '-'
end
String
包括Comparable
模块,该模块基于基类的compare(
)方法定义
、=
)等。因此,如果字符串a按字母顺序排在字符串b之前,ab
返回-1
,并且在比较数字的字符串表示形式时要非常小心。(即第一个字符到第一个字符,第二个字符到第二个…)
irb(main):001:0>'44'<'45'
=>正确
irb(主要):002:0>'44.123(无论什么)<'99.921(香蕉)'
=>正确
但是
irb(main):003:0>'44.123'<'100'
=>错误
irb(主要):004:0>'44.123'<'9.123'
=>正确
只要你知道你总是比较等宽字符串,字典顺序匹配数字顺序。如果没有,坏事情就会发生(特别是当最重要的数字发生变化时)。如果需要将字符串作为浮点数进行比较,请使用它:
if '10.1'.to_f > '9.239'.to_f
print 'yes'
end
正如@Zack`所说,所有的比较都是基于该类的“太空船”方法。有关String类的详细信息,请参见。
irb(main):003:0> '44.123' < '100'
=> false
irb(main):004:0> '44.123' < '9.123'
=> true
if '10.1'.to_f > '9.239'.to_f
print 'yes'
end