Convert an integer into words

From CodeCodex

Related content:

The following code will turn integer numerals (eg. 1, 2, 3) into spelled out, words (eg. "one", "two", "three").

Implementations[edit]

Algol 68[edit]

PROC number words =
  (
    INT n
  ) STRING :
    # returns a string representation of n in words. Currently
    deals with anything from 0 to 999 999 999. #
    BEGIN
        [] STRING digits =
            [] STRING (
                "zero",
                "one",
                "two",
                "three",
                "four",
                "five",
                "six",
                "seven",
                "eight",
                "nine"
            )[@0];
        [] STRING teens =
            [] STRING (
                "ten",
                "eleven",
                "twelve",
                "thirteen",
                "fourteen",
                "fifteen",
                "sixteen",
                "seventeen",
                "eighteen",
                "nineteen"
            )[@0];
        [] STRING decades =
            [] STRING (
                "twenty",
                "thirty",
                "forty",
                "fifty",
                "sixty",
                "seventy",
                "eighty",
                "ninety"
            )[@2];

        PROC three digits =
          (
            INT n
          ) STRING :
            # does the conversion for n from 0 to 999. #
            BEGIN
                INT tens = n MOD 100 OVER 10;
                INT units = n MOD 10;
                IF n >= 100 THEN
                        digits[n OVER 100]
                    +
                        " "
                    +
                        "hundred"
                    +
                        IF n MOD 100 /= 0 THEN
                            " and "
                        ELSE
                            ""
                        FI
                ELSE
                    ""
                FI
            +
                IF tens /= 0 THEN
                    IF tens = 1 THEN
                        teens[units]
                    ELSE
                            decades[tens]
                        +
                            IF units /= 0 THEN
                                "-"
                            ELSE
                                ""
                            FI
                    FI
                FI
            +
                IF units /= 0 AND tens /= 1 OR n = 0 THEN
                    digits[units]
                ELSE
                    ""
                FI
            END;
        INT n3 = n OVER 1 000 000;
        INT n2 = n MOD 1 000 000 OVER 1000;
        INT n1 = n MOD 1000;
            IF n3 /= 0 THEN
                three digits(n3) + " million"
            ELSE
                ""
            FI
        +
            IF n3 /= 0 AND (n2 /= 0 OR n1 >= 100) THEN
                ", "
            ELSE
                ""
            FI
        +
            IF n2 /= 0 THEN
                three digits(n2) + " thousand"
            ELSE
                ""
            FI
        +
            IF (n3 /= 0 OR n2 /= 0) AND n1 > 0 AND n1 < 100 THEN
                " and "
            ELIF n2 /= 0 AND n1 /= 0 THEN
                ", "
            ELSE
                ""
            FI
        +
            IF n1 /= 0 OR n = 0 THEN
                three digits(n1)
            ELSE
                ""
            FI
    END;

DO # until user hits EOF #
    on logical file end(standin, (REF FILE f) BOOL : GOTO finish);
    on value error(standin, (REF FILE f) BOOL : GOTO finish);
    INT n;
    print("n? ");
    read((n, new line));
    print((number words(n), new line))
OD;
finish:
SKIP

Perl[edit]

use Lingua::EN::Numbers qw(num2en);
num2en 234;