Number names: Difference between revisions

m
syntax highlighting fixup automation
m (syntax highlighting fixup automation)
Line 15:
=={{header|360 Assembly}}==
{{trans|AppleSoft Basic}}
<langsyntaxhighlight lang="360asm">* Number names 20/02/2017
NUMNAME CSECT
USING NUMNAME,R13
Line 197:
PG DS CL256
YREGS
END NUMNAME</langsyntaxhighlight>
{{out}}
<pre>
Line 216:
 
=={{header|Ada}}==
<langsyntaxhighlight lang="ada">with Ada.Text_IO;
 
procedure Integers_In_English is
Line 347:
Spell_And_Print(Samples(I));
end loop;
end Integers_In_English;</langsyntaxhighlight>
The implementation goes up to 10<sup>18</sup>-1
and also supports negative and zero inputs.
Line 376:
 
{{works with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release [http://sourceforge.net/projects/algol68/files/algol68toc/algol68toc-1.8.8d/algol68toc-1.8-8d.fc9.i386.rpm/download 1.8.8d.fc9.i386]}}
<langsyntaxhighlight lang="algol68">PROC number words = (INT n)STRING:(
# returns a string representation of n in words. Currently
deals with anything from 0 to 999 999 999. #
Line 413:
OD;
stop iteration:
SKIP</langsyntaxhighlight>
 
{{out|Example input with output}}
Line 426:
 
{{works with|ALGOL 68G|Any - tested with release [http://sourceforge.net/projects/algol68/files/algol68g/algol68g-1.18.0/algol68g-1.18.0-9h.tiny.el5.centos.fc11.i386.rpm/download 1.18.0-9h.tiny]}}
<langsyntaxhighlight Algol68lang="algol68">MODE EXCEPTION = STRUCT(STRING name, PROC VOID handler);
EXCEPTION value error = ("Value Error", stop);
 
Line 514:
FOR i TO 6 DO prod := prod * 10**i + i; example(prod) OD;
 
example(1278); example(1572); example(2010)</langsyntaxhighlight>
{{out}}
<pre>
Line 530:
=={{header|APL}}==
{{works with|Dyalog APL}}
<langsyntaxhighlight lang="apl">spell←{⎕IO←0
small←'' 'one' 'two' 'three' 'four' 'five' 'six' 'seven' 'eight'
small,←'nine' 'ten' 'eleven' 'twelve' 'thirteen' 'fourteen'
Line 556:
}/orders,⊂(''⍵)),∇100|⍵
}⍵
}</langsyntaxhighlight>
{{out}}
<pre> spell 0
Line 571:
With AppleScript's ability to access some of macOS's Objective-C frameworks, it's possible to get the job done with a single line:
 
<langsyntaxhighlight lang="applescript">use AppleScript version "2.4" -- OS X 10.10 (Yosemite) or later
use framework "Foundation"
 
Line 579:
 
numberToWords(-3.6028797018963E+10)
--> "minus thirty-six billion twenty-eight million seven hundred ninety-seven thousand eighteen point nine six three"</langsyntaxhighlight>
 
NSNumberFormatter supports several natural languages and by default uses the one set for the user on the host machine. However, its English is limited to US English, so there are no "and"s in the results.
Line 587:
Both scripts can display strange results with numbers at the extreme limits of floating-point resolution.
 
<langsyntaxhighlight lang="applescript">-- Parameters:
-- n: AppleScript integer or real.
-- longScale (optional): boolean. Whether to use long-scale -illions instead of short-scale. Default: false
Line 709:
--> "minus three billion six hundred and two thousand eight hundred and seventy-nine million seven hundred and one thousand eight hundred and ninety-six point three four"
numberToEnglish from -3.60287970189634E+12 with milliards
--> "minus three billion six hundred and two milliard eight hundred and seventy-nine million seven hundred and one thousand eight hundred and ninety-six point three four"</langsyntaxhighlight>
 
=={{header|Applesoft BASIC}}==
Handles zero and negative integers. Rounding errors occur with big numbers.
<langsyntaxhighlight ApplesoftBASIClang="applesoftbasic">10 INPUT "GIMME A NUMBER! "; N
20 GOSUB 100"NUMBER NAME
30 PRINT R$
Line 747:
288 DATA "EIGHT", "EIGHTEEN", "EIGHTY", "OCTILLION"
289 DATA "NINE", "NINETEEN", "NINETY", "NONILLION"
290 DATA "", "", "", "DECILLION"</langsyntaxhighlight>
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight lang="autohotkey">Loop { ; TEST LOOP
n =
Random Digits, 1, 36 ; random number with up to 36 digits
Line 789:
PrettyNumber(n) { ; inserts thousands separators into a number string
Return RegExReplace( RegExReplace(n,"^0+(\d)","$1"), "\G\d+?(?=(\d{3})+(?:\D|$))", "$0,")
}</langsyntaxhighlight>
 
=={{header|AWK}}==
<syntaxhighlight lang="awk">
<lang AWK>
# syntax: GAWK -f NUMBER_NAMES.AWK
BEGIN {
Line 844:
split("ten twenty thirty forty fifty sixty seventy eighty ninety",tens," ")
}
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 863:
{{works with|QBasic}}
 
<langsyntaxhighlight lang="qbasic">DECLARE FUNCTION int2Text$ (number AS LONG)
 
'small
Line 935:
 
int2Text$ = RTRIM$(outP)
END FUNCTION</langsyntaxhighlight>
 
{{out|Sample outputs}} (including the answer to the ultimate question of life, the universe, and everything):
Line 957:
=={{header|Batch File}}==
{{trans|BASIC}}
<langsyntaxhighlight lang="dos">::Number Names Task from Rosetta Code Wiki
::Batch File Implementation
 
Line 1,032:
 
set TotalOut=%TotalOut:~0,-1%
goto :EOF</langsyntaxhighlight>
{{Out}}
<pre>>NUMBER.BAT
Line 1,048:
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<langsyntaxhighlight lang="bbcbasic"> DIM test%(20)
test%() = 0, 1, 2, 19, 20, 21, 99, 100, 101, 300, 310, 1001, -1327, 1501, \
\ 10203, 12609, 101104, 102003, 467889, 1005006, -123000789
Line 1,087:
ENDIF
NEXT i%
= a$</langsyntaxhighlight>
{{out}}
<pre>
Line 1,116:
This will work up to and including 999999, or up to the maximum of the system word size, whichever is smaller.
 
<langsyntaxhighlight lang="bcpl">get "libhdr"
manifest $( MAXLEN = 256/BYTESPERWORD $)
 
Line 1,203:
writef("%N: %S*N", atoi(instr), spell(atoi(instr), numstr))
$) repeat
$)</langsyntaxhighlight>
{{out}}
<pre>Number? 0
Line 1,221:
{{trans|C++}}
 
<langsyntaxhighlight BlitzMaxlang="blitzmax">SuperStrict
 
Framework BRL.StandardIO
Line 1,301:
Local numberSpell:TSpell = New TSpell
Print number + " " + numberSpell.spell(number)
End Function</langsyntaxhighlight>
<pre>
99 ninety-nine
Line 1,314:
 
=={{header|C}}==
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <string.h>
 
Line 1,450:
say_number("123456789012345678901234567890123456789012345678900000001");
return 0;
}</langsyntaxhighlight>
{{out}}
<pre>minus forty-two
Line 1,462:
{{works with|C sharp|2.0+, works for numbers between 0 and 999,999,999}}
 
<langsyntaxhighlight lang="csharp">using System;
 
class NumberNamer {
Line 1,540:
}
}
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 1,550:
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <string>
#include <iostream>
using std::string;
Line 1,618:
SPELL_IT(1234567890);
return 0;
}</langsyntaxhighlight>
{{out}}
<pre>
Line 1,634:
{{trans|Common Lisp}}
 
<langsyntaxhighlight lang="clojure">(clojure.pprint/cl-format nil "~R" 1234)
=> "one thousand, two hundred thirty-four"</langsyntaxhighlight>
 
=={{header|CoffeeScript}}==
{{trans|Python}}
 
<langsyntaxhighlight lang="coffeescript">
spell_integer = (n) ->
tens = [null, null, "twenty", "thirty", "forty",
Line 1,698:
console.log spell_integer 2010
console.log spell_integer 4000123007913
</syntaxhighlight>
</lang>
 
{{out}}
Line 1,726:
 
 
<langsyntaxhighlight lang="commodorebasicv2">10 print chr$(147);chr$(14)
20 dim s$(11),ts$(11),t$(11),o$(11):co=39
30 for i=0 to 11:read s$(i),ts$(i),t$(i),o$(i):next
Line 1,773:
1009 data nine,nineteen,ninety,octillion
1010 data "","","",nonillion
1011 data "","","",decillion</langsyntaxhighlight>
 
{{out}}
Line 1,823:
=={{header|Common Lisp}}==
 
<langsyntaxhighlight lang="lisp">(format nil "~R" 1234)
=> "one thousand two hundred thirty-four"</langsyntaxhighlight>
 
=={{header|D}}==
{{trans|Python}}
use -version=number_names_main to see the output.
<langsyntaxhighlight lang="d">import std.stdio, std.array, std.algorithm, std.bigint, std.range;
 
immutable tens = ["", "", "twenty", "thirty", "forty",
Line 1,906:
writeln;
}
}</langsyntaxhighlight>
{{out}}
<pre> +0 -> zero
Line 1,934:
{{Trans|Pascal}}
Adaptation of [[#Pascal]] Program to run in delphi.
<syntaxhighlight lang="delphi">
<lang Delphi>
program Number_names;
 
Line 2,021:
writeln(2345286538456328, ': ', spell(2345286538456328));
Readln;
end.</langsyntaxhighlight>
 
=={{header|Elixir}}==
{{trans|Ruby}}
<langsyntaxhighlight lang="elixir">defmodule RC do
@small ~w(zero one two three four five six seven eight nine ten
eleven twelve thirteen fourteen fifteen sixteen seventeen
Line 2,072:
e in ArgumentError -> IO.puts Exception.message(e)
end
end)</langsyntaxhighlight>
 
{{out}}
Line 2,098:
=={{header|Erlang}}==
 
<langsyntaxhighlight lang="erlang">
-module(nr2eng).
-import(lists, [foreach/2, seq/2, append/2]).
Line 2,176:
end,
append(seq(1, 2000), [123123, 43234234])).
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 2,187:
=={{header|Euphoria}}==
{{trans|BASIC}}
<langsyntaxhighlight lang="euphoria">function abs(atom i)
if i < 0 then
return -i
Line 2,258:
puts(1,int2text(1234567890) & "\n")
puts(1,int2text(-987654321) & "\n")
puts(1,int2text(0) & "\n")</langsyntaxhighlight>
 
{{out}}
Line 2,268:
=={{header|F_Sharp|F#}}==
{{trans|OCaml}}
<langsyntaxhighlight lang="fsharp">let divMod n d = n / d, n % d
 
let join = String.concat ", "
Line 2,325:
join (List.map big fsegn)
;;</langsyntaxhighlight>
 
=={{header|Factor}}==
Factor "cheats" by having a standard library module for this task:
 
<langsyntaxhighlight lang="factor">IN: scratchpad USE: math.text.english
IN: scratchpad 43112609 number>text print
forty-three million, one hundred and twelve thousand, six hundred and nine
</syntaxhighlight>
</lang>
 
=={{header|FreeBASIC}}==
Can handle floating point numbers, and negatives, with absolute value less than one billion.
<langsyntaxhighlight lang="freebasic">dim shared as string*9 lows(0 to 19) = {"", "one", "two", "three", "four",_
"five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve",_
"thirteen", "fourteen", "fifteen", "sixteen", "seventeen",_
Line 2,395:
print numname(987654)
print numname(100000017)
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 2,408:
=={{header|Fortran}}==
{{works with|Fortran|90 and later}}
<langsyntaxhighlight lang="fortran">program spell
 
implicit none
Line 2,474:
end do
 
end program spell</langsyntaxhighlight>
Sample input:
<pre>-1
Line 2,500:
=={{header|Go}}==
Supports integers from <code>math.MinInt64 + 1</code> to <code>math.MaxInt64</code>.
<langsyntaxhighlight lang="go">package main
 
import "fmt"
Line 2,557:
}
return t
}</langsyntaxhighlight>
Output:
<pre>
Line 2,568:
 
=={{header|Groovy}}==
<langsyntaxhighlight lang="groovy">def divMod(BigInteger number, BigInteger divisor) {
def qr = number.divideAndRemainder(divisor)
[div:qr[0], remainder:qr[1]]
Line 2,642:
verifyToText 'one million and forty five', 1000045
verifyToText 'one million and fifteen', 1000015
verifyToText 'one billion, forty five thousand and one', 1000045001</langsyntaxhighlight>
Output:
<pre>twenty nine
Line 2,678:
 
=={{header|Haskell}}==
<langsyntaxhighlight lang="haskell">import Data.List (intercalate, unfoldr)
 
spellInteger :: Integer -> String
Line 2,713:
big (e, n) = spellInteger n ++ ' ' : (l !! e) ++ "illion"
where l = [undefined, undefined, "m", "b", "tr", "quadr",
"quint", "sext", "sept", "oct", "non", "dec"]</langsyntaxhighlight>
 
=={{header|HicEst}}==
<langsyntaxhighlight HicEstlang="hicest">SUBROUTINE NumberToWords(number)
CHARACTER outP*255, small*130, tens*80, big*80
REAL :: decimal_places = 7
Line 2,785:
TENS=ten twenty thirty forty fifty sixty seventy eighty ninety
 
BIG=thousand million billion trillion quadrillion</langsyntaxhighlight>
<langsyntaxhighlight HicEstlang="hicest">0 = zero
1234 = one thousand and two hundred thirty-four
12.34 = twelve point three four
Line 2,792:
32768 = thirty-two thousand and seven hundred sixty-eight
1E-3 = point zero zero one
-2.7182818 = minus two point seven one eight two eight one eight</langsyntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
<langsyntaxhighlight Iconlang="icon">link numbers # commas, spell
 
procedure main(arglist)
every x := !arglist do
write(commas(x), " -> ",spell(x))
end</langsyntaxhighlight>
 
{{libheader|Icon Programming Library}}
[http://www.cs.arizona.edu/icon/library/src/procs/numbers.icn numbers:spell] was used as a based for this procedure.
 
<langsyntaxhighlight Iconlang="icon">procedure spell(n) #: spell out integer (short scale)
local m, i
static scale
Line 2,841:
}
else fail # really big
end</langsyntaxhighlight>
Sample output:
<pre>#spell.exe 5 11 15 67 10132767 65535 -1234567890123456
Line 2,855:
=={{header|Inform 7}}==
{{works with|Z-machine}}
<syntaxhighlight lang ="inform7">say 32767 in words;</langsyntaxhighlight>
 
{{works with|Glulx virtual machine}}
<syntaxhighlight lang ="inform7">say 2147483647 in words;</langsyntaxhighlight>
 
=={{header|J}}==
'''Solutions:'''
<langsyntaxhighlight lang="j">u=. ;:'one two three four five six seven eight nine'
v=. ;:'ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen'
t=. ;:'twenty thirty forty fifty sixty seventy eighty ninety'
Line 2,885:
 
uk=: ' and '&en NB. British
us=: ' ' &en NB. American</langsyntaxhighlight>
 
'''Example:'''
Line 2,897:
=={{header|Java}}==
 
<langsyntaxhighlight lang="java">public enum IntToWords {
;
 
Line 2,974:
return sb.toString().trim();
}
}</langsyntaxhighlight>
Output:
<pre>zero
Line 2,993:
===Recursive===
 
<langsyntaxhighlight lang="java">public class NumberToWordsConverter { // works upto 9999999
 
final private static String[] units = {"Zero","One","Two","Three","Four",
Line 3,010:
return convert(i / 1000000) + " Million " + ((i % 1000000 > 0)? " " + convert(i % 1000000):"") ;
}
}</langsyntaxhighlight>
 
=={{header|JavaScript}}==
{{trans|Groovy}}
<langsyntaxhighlight JavaScriptlang="javascript">const divMod = y => x => [Math.floor(y/x), y % x];
 
const sayNumber = value => {
Line 3,057:
}
return name;
};</langsyntaxhighlight>
 
=={{header|Joy}}==
<syntaxhighlight lang=Joy"joy">
DEFINE units ==
["zero" "one" "two" "three" "four" "five" "six" "seven" "eight" "nine" "ten"
Line 3,107:
 
=={{header|jq}}==
<langsyntaxhighlight lang="jq"># Adapted from the go version.
# Tested with jq 1.4
#
Line 3,167:
end ;
 
say</langsyntaxhighlight>
Transcript (input followed by output):
<langsyntaxhighlight lang="jq">0
"zero"
-0
Line 3,185:
12345678912345678
"twelve quadrillion, three hundred and forty five trillion, six hundred and seventy eight billion, nine hundred and twelve million, three hundred and forty five thousand, six hundred and seventy eight"
</syntaxhighlight>
</lang>
 
=={{header|Julia}}==
Line 3,191:
 
'''Number Names Functions'''
<langsyntaxhighlight Julialang="julia">const stext = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
const teentext = ["eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen",
"seventeen", "eighteen", "nineteen"]
Line 3,255:
n < toobig || return "too big to say"
digits2text!(digits(n, base=10), use_short_scale)
end</langsyntaxhighlight>
 
'''Main'''
<langsyntaxhighlight Julialang="julia">using Printf
 
println("Some easy ones to start with\n")
Line 3,300:
println(" ", i, " is")
println(num2text(i, false))
</syntaxhighlight>
</lang>
 
{{out}}
Line 3,395:
 
There is an option to use the UK (rather than the US) method of spelling out numbers whereby 'and' is placed at strategic positions.
<langsyntaxhighlight lang="scala">// version 1.1.2
 
val oneNames = listOf(
Line 3,467:
println("Using UK representation:")
for (i in exampleNumbers) println("${"%20d".format(i)} = ${numToText(i, true)}")
}</langsyntaxhighlight>
 
{{out}}
Line 3,509:
 
=={{header|Liberty BASIC}}==
<syntaxhighlight lang="lb">
<lang lb>
global outnum$
dim ones$(20),tens$(9),gr$(5),group(5)
Line 3,619:
data "ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"
data "twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 3,627:
 
=={{header|Logo}}==
<langsyntaxhighlight lang="logo">make "numbers {one two three four five six seven eight nine ten
eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen}
 
Line 3,654:
end
 
print to.english 1234567 ; one million two hundred thirty four thousand five hundred sixty seven</langsyntaxhighlight>
 
=={{header|Lua}}==
===Original===
<langsyntaxhighlight lang="lua">words = {"one ", "two ", "three ", "four ", "five ", "six ", "seven ", "eight ", "nine "}
levels = {"thousand ", "million ", "billion ", "trillion ", "quadrillion ", "quintillion ", "sextillion ", "septillion ", "octillion ", [0] = ""}
iwords = {"ten ", "twenty ", "thirty ", "forty ", "fifty ", "sixty ", "seventy ", "eighty ", "ninety "}
Line 3,694:
end
 
if #vword == 0 then print "zero" else print(vword) end</langsyntaxhighlight>
 
===Alternate===
As used in [[Four is magic#Lua|Four is magic]]
<langsyntaxhighlight lang="lua">-- Number names, in Lua, 6/17/2020 db
local oneslist = { [0]="", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }
local teenlist = { [0]="ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }
Line 3,738:
for _, num in ipairs(numbers) do
print( string.format("%.f: '%s'", num, numname(num)) )
end</langsyntaxhighlight>
{{out}}
<pre style="height:30ex;overflow:scroll">-1: 'negative one'
Line 3,801:
 
=={{header|Maple}}==
<syntaxhighlight lang="text">number_name := n -> convert(n, english)
number_name(2001);
"two thousand one"</langsyntaxhighlight>
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<syntaxhighlight lang="text">small = "zero"["one", "two", "three", "four", "five", "six", "seven",
"eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen",
"fifteen", "sixteen", "seventeen", "eighteen",
Line 3,829:
Riffle[Select[
MapThread[StringJoin, {name /@ #, Reverse@big[[;; Length@#]]}] &@
IntegerDigits[n, 1000], StringFreeQ[#, "zero"] &], ","];</langsyntaxhighlight>
 
=={{header|Maxima}}==
<syntaxhighlight lang="maxima">
<lang Maxima>
l: [99, 300, 310, 1501, 12609, 512609, 43112609, 77000112609, 2000000000100,
999999999999999999, 0, -99, -1501, -77000112609, -123456789987654321];
map( lambda([n], printf(true, "~20d ~r~%", n, n)), l)$
</syntaxhighlight>
</lang>
 
=={{header|MAXScript}}==
<syntaxhighlight lang="maxscript">
<lang MAXScript>
fn numToEng num =
(
Line 3,876:
ret = (toupper ret[1]) + (tolower (substring ret 2 -1)) -- make the first char uppercase and rest lowercase
return ret
)</langsyntaxhighlight>
 
Examples:
<syntaxhighlight lang="maxscript">
<lang MAXScript>
numtoeng 0
"Zero"
Line 3,895:
"Four hundred and twenty one million, seven hundred and fifty two thousand, three hundred and two"
 
</syntaxhighlight>
</lang>
 
=={{header|MiniScript}}==
<langsyntaxhighlight MiniScriptlang="miniscript">singles = " one two three four five six seven eight nine ".split
teens = "ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen ".split
tys = " twenty thirty forty fifty sixty seventy eighty ninety".split
Line 3,925:
for n in [-1234, 0, 7, 42, 4325, 1000004, 214837564]
print n + ": " + numberName(n)
end for</langsyntaxhighlight>
 
Output:
Line 3,938:
=={{header|Nim}}==
{{trans|Python}}
<langsyntaxhighlight lang="nim">import strutils, algorithm
 
const
Line 4,009:
while n != 0:
echo align($n, 14)," -> ",spellInteger(n)
n = n div -10</langsyntaxhighlight>
 
{{out}}
Line 4,037:
=={{header|Objeck}}==
{{trans|BASIC}}
<langsyntaxhighlight lang="objeck">
class NumberNames {
small : static : String[];
Line 4,131:
}
}
</syntaxhighlight>
</lang>
 
output:
Line 4,142:
 
=={{header|Objective-C}}==
<langsyntaxhighlight lang="objc">#import <Foundation/Foundation.h>
 
int main() {
Line 4,157:
}
return 0;
}</langsyntaxhighlight>
Output:
<pre>
Line 4,169:
=={{header|OCaml}}==
 
<langsyntaxhighlight lang="ocaml">let div_mod n d = (n / d, n mod d)
let join = String.concat ", " ;;
 
Line 4,225:
in
join(List.map big fsegn)
;;</langsyntaxhighlight>
 
=={{header|PARI/GP}}==
<langsyntaxhighlight lang="parigp">Eng(n:int)={
my(tmp,s="");
if (n >= 1000000,
Line 4,261:
Edigit(n)={
["one", "two", "three", "four", "five", "six", "seven", "eight", "nine"][n]
};</langsyntaxhighlight>
 
=={{header|Pascal}}==
{{works with|Free_Pascal}}
<langsyntaxhighlight lang="pascal">program NumberNames(output);
 
const
Line 4,346:
writeln(2343454564356, ': ', spell(2343454564356));
writeln(2345286538456328, ': ', spell(2345286538456328));
end.</langsyntaxhighlight>
Output:
 
Line 4,373:
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">use Lingua::EN::Numbers 'num2en';
 
print num2en(123456789), "\n";</langsyntaxhighlight>
 
=={{header|Phix}}==
Line 4,382:
Implemented as an [[Executable_library]] for use in [[Names_to_numbers#Phix|Names_to_numbers]].<br>
The distribution now contains builtins\ordinal.e which implements spell() as ordinal(atom n, bool bJustSpell=true), see the manual.
<!--<langsyntaxhighlight Phixlang="phix">(phixonline)-->
<span style="color: #000080;font-style:italic;">--
-- demo\rosetta\Number_names.exw
Line 4,496:
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">()</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<!--</langsyntaxhighlight>-->
{{out}}
<pre style="font-size: 8px">
Line 4,537:
 
=={{header|PHP}}==
<langsyntaxhighlight lang="php">$orderOfMag = array('Hundred', 'Thousand,', 'Million,', 'Billion,', 'Trillion,');
$smallNumbers = array('Zero', 'One', 'Two', 'Three', 'Four', 'Five', 'Six', 'Seven', 'Eight', 'Nine',
'Ten', 'Eleven', 'Twelve', 'Thirteen', 'Fourteen', 'Fifteen', 'Sixteen', 'Seventeen', 'Eighteen', 'Nineteen');
Line 4,593:
// The number is zero
return $str . "{$smallNumbers[(int)$thisPart]}";
}</langsyntaxhighlight>
Example:
<langsyntaxhighlight lang="php">NumberToEnglish(0);
NumberToEnglish(12);
NumberToEnglish(123);
NumberToEnglish(1234567890123);
NumberToEnglish(65535);
NumberToEnglish(-54321);</langsyntaxhighlight>
Returns:
<pre>Zero
Line 4,610:
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(de numName (N)
(cond
((=0 N) "zero")
Line 4,631:
(pack "-" (numNm (% N 10))) ) ) )
((rank N '((100 . "hundred") (1000 . "thousand") (1000000 . "million")))
(pack (numNm (/ N (car @))) " " (cdr @) " " (numNm (% N (car @)))) ) ) )</langsyntaxhighlight>
 
=={{header|PL/I}}==
<langsyntaxhighlight PLlang="pl/Ii"> declare integer_names (0:20) character (9) varying static initial
('zero', 'one', 'two', 'three', 'four', 'five', 'six',
'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve',
Line 4,687:
value = value ||h || v || y(i);
end;
put skip edit (trim(N), ' = ', value) (a);</langsyntaxhighlight>
 
=={{header|PL/M}}==
Line 4,693:
works up to 65535.
 
<langsyntaxhighlight lang="plm">100H:
BDOS: PROCEDURE (FN, ARG); DECLARE FN BYTE, ARG ADDRESS; GO TO 5; END BDOS;
EXIT: PROCEDURE; CALL BDOS(0,0); END EXIT;
Line 4,773:
CALL SPELL(READ$NUMBER(FCB$NAME));
CALL EXIT;
EOF</langsyntaxhighlight>
{{out}}
<pre>A>spell 0
Line 4,787:
Note that the PB compiler has some limitations related to how the <CODE>QUAD</CODE> data type is handled behind the scenes (extremely large values lose precision; see the sample output below the code).
 
<langsyntaxhighlight lang="powerbasic">FUNCTION int2Text (number AS QUAD) AS STRING
IF 0 = number THEN
FUNCTION = "zero"
Line 4,854:
#ENDIF
? int2Text(n)
END FUNCTION</langsyntaxhighlight>
 
Sample output:
Line 4,863:
 
=={{header|PowerShell}}==
<syntaxhighlight lang="powershell">
<lang PowerShell>
function Get-NumberName
{
Line 4,995:
 
1, 234, 31337, 987654321 | Get-NumberName
</syntaxhighlight>
</lang>
{{Out}}
<pre>
Line 5,007:
 
=={{header|Prolog}}==
<langsyntaxhighlight lang="prolog">
:- module(spell, [spell/2]).
 
Line 5,069:
spell(N, Rest),
string_concat(", ", Rest, S).
</syntaxhighlight>
</lang>
{{Out}}
<pre>
Line 5,091:
=={{header|PureBasic}}==
The range of integers handled has been set at an obscene 45 digits.
<langsyntaxhighlight PureBasiclang="purebasic">DataSection
numberNames:
;small
Line 5,211:
CloseConsole()
EndIf
</syntaxhighlight>
</lang>
{{out}}
<pre>Give me an integer (or q to quit)! 3
Line 5,225:
Note: This example is also used as a module in the [[Names to numbers#Python]] task and should be kept in-sync.
 
<langsyntaxhighlight lang="python">TENS = [None, None, "twenty", "thirty", "forty",
"fifty", "sixty", "seventy", "eighty", "ninety"]
SMALL = ["zero", "one", "two", "three", "four", "five",
Line 5,288:
n //= -10
print('%-12i -> %s' % (n, spell_integer(n)))
print('')</langsyntaxhighlight>
 
{{out}}
Line 5,318:
An alternative solution that can name very large numbers.
 
<langsyntaxhighlight lang="python">
def int_to_english(n):
if n < 0: return "minus " + int_to_english(-n)
Line 5,368:
print(int_to_english(2 ** 100))
print(int_to_english(10 ** (2*64)))
</syntaxhighlight>
</lang>
{{out}}
<pre>
Line 5,381:
{{trans|C#}}
 
<syntaxhighlight lang="quackery">
<lang Quackery>
[ [ table
$ "zero" $ "one" $ "two"
Line 5,439:
name$ nest$
60 wrap$ cr cr ]
</syntaxhighlight>
</lang>
 
{{out}}
Line 5,484:
=={{header|R}}==
Can do zero and negatives.
<langsyntaxhighlight Rlang="r"># Number Names
 
ones <- c("", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
Line 5,535:
my_num$text <- as.character(lapply(my_num$nums, make_number))
print(my_num, right=F)
</syntaxhighlight>
</lang>
 
{{out}}
Line 5,580:
=={{header|Racket}}==
 
<syntaxhighlight lang="racket">
<lang Racket>
#lang racket
 
Line 5,618:
(define r (+ (* e (random e)) (random e)))
(printf "~s: ~a\n" r (integer->english r)))
</syntaxhighlight>
</lang>
 
{{out}}
Line 5,640:
 
Apart from the <tt>$m++</tt> this can be viewed as a purely functional program; we use nested <tt>gather</tt>/<tt>take</tt> constructs to avoid accumulators.
<syntaxhighlight lang="raku" perl6line>constant @I = <zero one two three four five six seven eight nine
ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen>;
constant @X = <0 X twenty thirty forty fifty sixty seventy eighty ninety>;
Line 5,673:
while '' ne (my $n = prompt("Number: ")) {
say int-name($n);
}</langsyntaxhighlight>
Output:
<pre>Number: 0
Line 5,690:
Alternately, we could use the [https://modules.raku.org/search/?q=Lingua%3A%3AEN%3A%3ANumbers Lingua::EN::Numbers module from the Raku ecosystem]. It will return similar output for similar inputs as above, but also handles fractions with configurable reduction and denominator, exponential notation, and ordinal notation.
 
<syntaxhighlight lang="raku" perl6line>use Lingua::EN::Numbers; # Version 2.4.0 or higher
 
put join "\n", .&cardinal, .&cardinal(:improper) with -7/4;
Line 5,698:
put join "\n", .&cardinal, .&cardinal-year, .&ordinal, .&ordinal-digit with 1999;
 
.&cardinal.put for 6.022e23, 42000, π;</langsyntaxhighlight>
 
<pre>negative one and three quarters
Line 5,736:
this simple script available [https://github.com/AbdelrahmanGIT/RingSamples/blob/master/src/ConvertNumbersToString.ring here]
 
<langsyntaxhighlight lang="ring">
OneList=["zero", "one", "two", "three", "four",
"five", "six", "seven", "eight", "nine",
Line 5,813:
return str2list(str)
 
</syntaxhighlight>
</lang>
{{out}}
for input of:
Line 5,881:
{{works with|Ruby|1.9.2+}}
 
<langsyntaxhighlight lang="ruby">SMALL = %w(zero one two three four five six seven eight nine ten
eleven twelve thirteen fourteen fifteen sixteen seventeen
eighteen nineteen)
Line 5,940:
puts "Error: #{e}"
end
end</langsyntaxhighlight>
{{out}}
<pre>
Line 5,964:
 
=={{header|Rust}}==
<langsyntaxhighlight lang="rust">use std::io::{self, Write, stdout};
 
const SMALL: &[&str] = &[
Line 6,034:
write!(&mut stdout, "\n").unwrap();
}
}</langsyntaxhighlight>
 
{{out}}
Line 6,049:
=={{header|Scala}}==
{{libheader|Scala}}
<langsyntaxhighlight lang="scala">import scala.annotation.tailrec
import scala.collection.parallel.ParSeq
 
Line 6,154:
 
}.seq.sorted.foreach(num => println(f"$num%+,80d -> ${longhand(numeral = num, showAnd = true)}"))
} // object SpellNumber @ line 110</langsyntaxhighlight>
 
{{out}}
Line 6,265:
=== Recursive ===
Recursive TreeMap solution (for values up to trillions):
<langsyntaxhighlight lang="scala">import scala.collection.immutable.TreeMap
 
val NUMBERS = TreeMap(
Line 6,291:
}
}
</syntaxhighlight>
</lang>
 
Examples
Line 6,305:
The library [http://seed7.sourceforge.net/libraries/wrinum.htm wrinum.s7i] contains the function [http://seed7.sourceforge.net/libraries/wrinum.htm#str%28ENGLISH,in_integer%29 str(ENGLISH, ...)] which converts an integer to its written english equivalent.
 
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
include "stdio.s7i";
include "wrinum.s7i";
Line 6,316:
writeln(str(ENGLISH, number));
end for;
end func;</langsyntaxhighlight>
 
=={{header|SenseTalk}}==
<langsyntaxhighlight lang="sensetalk">
set numbers to [0,1,7,22,186,pi,-48.6,-3451,925734, 12570902378]
 
Line 6,327:
put output
end repeat
</syntaxhighlight>
</lang>
Output:
<pre>
Line 6,344:
=={{header|SequenceL}}==
Works on all 32 bit signed integers.<br>
<langsyntaxhighlight lang="sequencel">import <Utilities/Math.sl>;
import <Utilities/Sequence.sl>;
import <Utilities/Conversion.sl>;
Line 6,404:
in
hundredsWord ++ andWord ++ tensWord ++ onesWord;</langsyntaxhighlight>
 
{{out}}
Line 6,421:
=={{header|Shale}}==
 
<langsyntaxhighlight Shalelang="shale">#!/usr/local/bin/shale
 
maths library
Line 6,515:
random maths::() 1000000000 % speak() // Cap it to less than 1 billion.
i++
} while</langsyntaxhighlight>
 
{{out}}
Line 6,545:
 
=={{header|Sidef}}==
<langsyntaxhighlight lang="ruby">var l = frequire('Lingua::EN::Numbers');
say l.num2en(123456789);</langsyntaxhighlight>
 
{{out}}
Line 6,554:
 
=={{header|SQL}}==
<syntaxhighlight lang="sql">
<lang SQL>
select val, to_char(to_date(val,'j'),'jsp') name
from
Line 6,565:
 
select to_char(to_date(5373485,'j'),'jsp') from dual;
</syntaxhighlight>
</lang>
<pre>
VAL NAME
Line 6,585:
{{trans|Kotlin}}
 
<langsyntaxhighlight lang="swift">extension Int {
private static let bigNames = [
1_000: "thousand",
Line 6,718:
for number in nums {
print("\(number) => \(number.numberName)")
}</langsyntaxhighlight>
 
{{out}}
Line 6,740:
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">proc int2words {n} {
if { ! [regexp -- {^(-?\d+)$} $n -> n]} {
error "not a decimal integer"
Line 6,811:
catch {int2words $test} result
puts "$test -> $result"
}</langsyntaxhighlight>
produces
<div style="width:full;overflow:scroll">
Line 6,836:
 
=={{header|VBA}}==
{{trans|Phix}}<langsyntaxhighlight lang="vb">Public twenties As Variant
Public decades As Variant
Public orders As Variant
Line 6,949:
Debug.Print Format(smartp(si), "@@@@@@@@@@@@@@@@"); " "; spell(si)
Next i
End Sub</langsyntaxhighlight>{{out}}
<pre> 99 ninety-nine
300 three hundred
Line 6,990:
 
If one were to use variants further and get them to play nice as <code>Decimal</code>, this could theoretically be extended up to the octillion range.
<langsyntaxhighlight lang="vb">Option Explicit
 
Private small As Variant, tens As Variant, big As Variant
Line 7,049:
 
int2Text$ = Trim$(outP)
End Function</langsyntaxhighlight>
 
Example output (in a msgbox) is identical to the BASIC output.
Line 7,060:
This solution works for integers up to 1000. It should be fairly ovbious how it works, and so can be extended if needed.
 
<langsyntaxhighlight lang="vbnet">Module Module1
Sub Main()
Line 7,087:
End Function
 
End Module</langsyntaxhighlight>
 
=={{header|Vlang}}==
{{trans|go}}
<langsyntaxhighlight lang="vlang">const (
small = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]
tens = ["", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
Line 7,147:
println(say(n))
}
}</langsyntaxhighlight>
{{out}}
<pre>
Line 7,160:
{{trans|Go}}
Although the third example here works correctly, it is not safe to use this script for numbers with an absolute magnitude >= 2^53 as integers cannot be expressed exactly by Wren's Num type beyond that limit.
<langsyntaxhighlight lang="ecmascript">var small = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven",
"twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"]
 
Line 7,204:
}
 
for (n in [12, 1048576, 9e18, -2, 0]) System.print(say.call(n))</langsyntaxhighlight>
 
{{out}}
Line 7,216:
 
=={{header|XPL0}}==
<langsyntaxhighlight XPL0lang="xpl0">code ChOut=8, CrLf=9, Text=12;
 
proc NumName(Dev, Num); \Output integer Num in prose to device Dev
Line 7,268:
NumName(0, 1_000_000); CrLf(0);
NumName(0, 1_234_567_890); CrLf(0);
]</langsyntaxhighlight>
 
{{out}}
Line 7,282:
=={{header|zkl}}==
{{trans|Scala}}
<langsyntaxhighlight lang="zkl">var
ns =[1..20].chain([30..90,10]).walk(),
names=T("one","two","three","four","five","six","seven","eight","nine",
Line 7,303:
}else ""
}(n).strip() // sometimes there is a trailing space
}</langsyntaxhighlight>
<langsyntaxhighlight lang="zkl">foreach n in (T(85001,155019,4547000,6766027,55555555555)){
println("%,d is %s".fmt(n,numberToString(n)));
}</langsyntaxhighlight>
{{out}}
<pre>
10,333

edits