Ordinal numbers   (as used in this Rosetta Code task),   are numbers that describe the   position   of something in a list.

It is this context that ordinal numbers will be used, using an English-spelled name of an ordinal number.



The ordinal numbers are   (at least, one form of them):

  1st  2nd  3rd  4th  5th  6th  7th  ···  99th  100th  ···  1000000000th  ···  etc

sometimes expressed as:

  1st  2nd  3rd  4th  5th  6th  7th  ···  99th  100th  ···  1000000000th  ···



For this task, the following (English-spelled form) will be used:

  first second third fourth fifth sixth seventh ninety-nineth one hundredth one billionth



Furthermore, the American version of numbers will be used here   (as opposed to the British).

2,000,000,000   is two billion,   not   two milliard.



Task

Write a driver and a function (subroutine/routine ···) that returns the English-spelled ordinal version of a specified number   (a positive integer).

Optionally, try to support as many forms of an integer that can be expressed:   123   00123.0   1.23e2   all are forms of the same integer.

Show all output here.



Test cases

Use (at least) the test cases of:

  1  2  3  4  5  11  65  100  101  272  23456  8007006005004003



Related tasks

   Number names
   N'th


test_ordinal(Number):-
    number_name(Number, ordinal, Name),
    writef('%w: %w\n', [Number, Name]).
 
main:-
    test_ordinal(1),
    test_ordinal(2),
    test_ordinal(3),
    test_ordinal(4),
    test_ordinal(5),
    test_ordinal(11),
    test_ordinal(15),
    test_ordinal(21),
    test_ordinal(42),
    test_ordinal(65),
    test_ordinal(98),
    test_ordinal(100),
    test_ordinal(101),
    test_ordinal(272),
    test_ordinal(300),
    test_ordinal(750),
    test_ordinal(23456),
    test_ordinal(7891233),
    test_ordinal(8007006005004003).