Difference between revisions of "Convert an integer into words"

From CodeCodex

(Perl)
 
(9 intermediate revisions by 6 users not shown)
Line 61: Line 61:
 
                 IF n >= 100 THEN
 
                 IF n >= 100 THEN
 
                         digits[n OVER 100]
 
                         digits[n OVER 100]
                   
+
                    +
 
                         " "
 
                         " "
                   
+
                    +
 
                         "hundred"
 
                         "hundred"
                   
+
                    +
 
                         IF n MOD 100 /= 0 THEN
 
                         IF n MOD 100 /= 0 THEN
 
                             " and "
 
                             " and "
Line 74: Line 74:
 
                     ""
 
                     ""
 
                 FI
 
                 FI
           
+
            +
 
                 IF tens /= 0 THEN
 
                 IF tens /= 0 THEN
 
                     IF tens = 1 THEN
 
                     IF tens = 1 THEN
Line 80: Line 80:
 
                     ELSE
 
                     ELSE
 
                             decades[tens]
 
                             decades[tens]
                       
+
                        +
 
                             IF units /= 0 THEN
 
                             IF units /= 0 THEN
 
                                 "-"
 
                                 "-"
Line 88: Line 88:
 
                     FI
 
                     FI
 
                 FI
 
                 FI
           
+
            +
 
                 IF units /= 0 AND tens /= 1 OR n = 0 THEN
 
                 IF units /= 0 AND tens /= 1 OR n = 0 THEN
 
                     digits[units]
 
                     digits[units]
Line 99: Line 99:
 
         INT n1 = n MOD 1000;
 
         INT n1 = n MOD 1000;
 
             IF n3 /= 0 THEN
 
             IF n3 /= 0 THEN
                 three digits(n3)   " million"
+
                 three digits(n3) + " million"
 
             ELSE
 
             ELSE
 
                 ""
 
                 ""
 
             FI
 
             FI
       
+
        +
 
             IF n3 /= 0 AND (n2 /= 0 OR n1 >= 100) THEN
 
             IF n3 /= 0 AND (n2 /= 0 OR n1 >= 100) THEN
 
                 ", "
 
                 ", "
Line 109: Line 109:
 
                 ""
 
                 ""
 
             FI
 
             FI
       
+
        +
 
             IF n2 /= 0 THEN
 
             IF n2 /= 0 THEN
                 three digits(n2)   " thousand"
+
                 three digits(n2) + " thousand"
 
             ELSE
 
             ELSE
 
                 ""
 
                 ""
 
             FI
 
             FI
       
+
        +
 
             IF (n3 /= 0 OR n2 /= 0) AND n1 > 0 AND n1 < 100 THEN
 
             IF (n3 /= 0 OR n2 /= 0) AND n1 > 0 AND n1 < 100 THEN
 
                 " and "
 
                 " and "
Line 123: Line 123:
 
                 ""
 
                 ""
 
             FI
 
             FI
       
+
        +
 
             IF n1 /= 0 OR n = 0 THEN
 
             IF n1 /= 0 OR n = 0 THEN
 
                 three digits(n1)
 
                 three digits(n1)
Line 141: Line 141:
 
finish:
 
finish:
 
SKIP
 
SKIP
 +
</pre>
 +
 +
===Perl===
 +
<pre class="perl">
 +
use Lingua::EN::Numbers qw(num2en);
 +
num2en 234;
 
</pre>
 
</pre>
  
 
[[Category:Algol 68]]
 
[[Category:Algol 68]]
 +
[[Category:Perl]]
 
[[Category:Language]]
 
[[Category:Language]]
 
[[Category:String]]
 
[[Category:String]]
 
[[Category:Numbers]]
 
[[Category:Numbers]]

Latest revision as of 04:59, 6 December 2010

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;