From: "(r.*n){2}" Date: 2010-09-28T11:55:09+09:00 Subject: Re: Space Ship Operator <=> Odd Behaviour On Sep 27, 10:13 pm, Nathanial Allan wrote: > I have come across a strange occurance when I use the space ship > operator to compare percentages. > > I want to compare percentages to see if they are greater than, less than > or equal to 85%, this mostly works fine - all the way up to 99% - it > returns a 1 obviously meaning that 99% is greater than 85% > > however the strangeness comes in when I attempt to compare 100% or > greater against 85% - it returns -1 > > I am fairly new to ruby - by no means an expert so I suspect there is > something wrong with what I am doing rather than the spaceship operator. > Can someone please shine some light on this for me so that I may better > understand. > > I have the knowledge to perform this operation another way with differnt > code, but I am interested to know why - if there is a logical > explaination. > > Thanks in advance! > -- > Posted viahttp://www.ruby-forum.com/. that is because the sort being performed is alphanumeric instead of numeric. In the example below, z has the correct sorted values. Due to the way to_i is defined, '10%'.to_i is same as '10'.to_i. x = [ '35%', '25%', '5%', '10%', '100%', '15%' ] y = x.sort { |a,b| a <=> b } z = x.sort { |a,b| a.to_i <=> b.to_i } puts "x is:" p x puts "y is:" p y puts "z is:" p z Output: x is: ["35%", "25%", "5%", "10%", "100%", "15%"] y is: ["10%", "100%", "15%", "25%", "35%", "5%"] z is: ["5%", "10%", "15%", "25%", "35%", "100%"]