Never been to DZone Snippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

Ordinals for All Numeric Types (See related posts)

This snippet will extend all numerical types with a method for returning the English ordinal, i.e. 1st, 2nd, 3rd, 4th, etc.

class Numeric
  def ordinal
    cardinal = self.to_i.abs
    if (10...20).include?(cardinal) then
      cardinal.to_s << 'th'
    else
      cardinal.to_s << %w{th st nd rd th th th th th th}[cardinal % 10]
    end
  end
end
 
[1, 22, 123, 10, -3.1415].collect { |i| i.ordinal }
=> ["1st", "22nd", "123rd", "10th", "3rd"]


This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.

Comments on this post

hank posts on Aug 16, 2006 at 01:33
irb(main):011:0> 112.ordinal
=> "112nd"

Hmm...needs to check the last 2 digits for a match in the teens. Here's a patched version:

class Numeric
def ordinal
cardinal = self.to_i.abs
if (10...20).include?(cardinal%100) then
cardinal.to_s << 'th'
else
cardinal.to_s << %w{th st nd rd th th th th th th}[cardinal % 10]
end
end
end

You need to create an account or log in to post comments to this site.


Click here to browse all 4858 code snippets

Related Posts