我在正在从事的项目中遇到了一块代码,看起来有点可怕。它应该在两个数字之间显示/- delta,但是它使用>
比较数字字符串而不是数字。
我假设该代码目前正常工作,因此我只是想了解Ruby在这种情况下如何比较这些字符串。
这是一个替换变量的示例:
if '55.59(100)' > '56.46(101)'
delta = '+'
else
delta = '-'
end
be 非常在比较词典数字的字符串表示时,请小心。(即第一个字符的第一个字符,第二到第二个...)
irb(main):001:0> '44' < '45'
=> true
irb(main):002:0> '44.123(whatever)' < '99.921(bananas)'
=> true
但是
irb(main):003:0> '44.123' < '100'
=> false
irb(main):004:0> '44.123' < '9.123'
=> true
只要您始终比较相等的宽度字符串,词典订购就与数值顺序相匹配。如果没有,坏事开始发生(尤其是当数字最重要的变化时)。
String
包括基于基类的比较(<=>
)方法定义<
,>
,>=
等的Comparable
模块。因此,如果字符串A在字符串B之前按字母顺序出现,则a <=> b
返回-1
,并且<
返回true
。相同的<=>
方法用于分类字符串,因此您可以想象在一个排序的字符串中,每个字符串都"小于右边的邻居"。
如果您需要将字符串作为浮点数进行比较,请使用它:
if '10.1'.to_f > '9.239'.to_f
print 'yes'
end