[Newbies] 23 to 23rd?

Yoshiki Ohshima yoshiki at vpri.org
Thu Dec 11 18:48:41 UTC 2008


At Thu, 11 Dec 2008 12:23:45 -0600,
Tim Johnson wrote:
> 
> Hi,
> 
> Does anyone have, or know of, existing code to perform the rather  
> anglo-centric (?) function of turning 3 into '3rd,' 22 into '22nd,'  
> etc.?

  Heh, if Wikipedia is right, the following method for Integer would
do:

ordinal

	| str table lookup |
	str := self printString.
	"self <= 0 ifTrue: [...]."
	table := #('st' 'nd' 'rd').
	lookup := [:n | ^ str, (table at: n ifAbsent: ['th'])].
	self < 10 ifTrue: [lookup value: self].
	(str at: (str size - 1)) = $1 ifTrue: [^ str, 'th'].
	^ lookup value: (self \\ 10).

(-10 to: 200) collect: [:i | i ordinal]

 #('-10th' '-9th' '-8th' '-7th' '-6th' '-5th' '-4th' '-3th' '-2th' '-1th' '0th' '1st' '2nd' '3rd' '4th' '5th' '6th' '7th' '8th' '9th' '10th' '11th' '12th' '13th' '14th' '15th' '16th' '17th' '18th' '19th' '20th' '21st' '22nd' '23rd' '24th' '25th' '26th' '27th' '28th' '29th' '30th' '31st' '32nd' '33rd' '34th' '35th' '36th' '37th' '38th' '39th' '40th' '41st' '42nd' '43rd' '44th' '45th' '46th' '47th' '48th' '49th' '50th' '51st' '52nd' '53rd' '54th' '55th' '56th' '57th' '58th' '59th' '60th' '61st' '62nd' '63rd' '64th' '65th' '66th' '67th' '68th' '69th' '70th' '71st' '72nd' '73rd' '74th' '75th' '76th' '77th' '78th' '79th' '80th' '81st' '82nd' '83rd' '84th' '85th' '86th' '87th' '88th' '89th' '90th' '91st' '92nd' '93rd' '94th' '95th' '96th' '97th' '98th' '99th' '100th' '101st' '102nd' '103rd' '104th' '105th' '106th' '107th' '108th' '109th' '110th' '111th' '112th' '113th' '114th' '115th' '116th' '117th' '118th' '119th' '120th' '121st' '122nd' '123rd' '124th' '125th' '126th' '127th' '128th' '129th' '130th' '131st' '132nd' '133rd' '134th' '135th' '136th' '137th' '138th' '139th' '140th' '141st' '142nd' '143rd' '144th' '145th' '146th' '147th' '148th' '149th' '150th' '151st' '152nd' '153rd' '154th' '155th' '156th' '157th' '158th' '159th' '160th' '161st' '162nd' '163rd' '164th' '165th' '166th' '167th' '168th' '169th' '170th' '171st' '172nd' '173rd' '174th' '175th' '176th' '177th' '178th' '179th' '180th' '181st' '182nd' '183rd' '184th' '185th' '186th' '187th' '188th' '189th' '190th' '191st' '192nd' '193rd' '194th' '195th' '196th' '197th' '198th' '199th' '200th')


What would be the correct result for a negative number?

-- Yoshiki


More information about the Beginners mailing list