Task

Show how to spell out a number in English.

You can use a preexisting implementation or roll your own, but you should support inputs up to at least one million (or the maximum value of your language's default bounded integer type, if that's less).

Support for inputs other than positive integers (like zero, negative integers, and floating-point numbers) is optional.



Related task

   Spelling of ordinal numbers.


::Number Names Task from Rosetta Code Wiki
::Batch File Implementation
 
@echo off
setlocal enabledelayedexpansion
 
if "%~1"=="iterate" goto num_name

::Define the words
set "small=One Two Three Four Five Six Seven Eight Nine Ten"
set "small=%small% Eleven Twelve Thirteen Fourteen Fifteen Sixteen Seventeen Eighteen Nineteen"
set "decade=Twenty Thirty Forty Fifty Sixty Seventy Eighty Ninety"
set "big=Thousand Million Billion"

::Seperating each word...
set cnt=0
for %%X in (%small%) do (set /a "cnt+=1"&set small!cnt!=%%X)
set cnt=0
for %%Y in (%decade%) do (set decade!cnt!=%%Y&set /a "cnt+=1")
set cnt=0
for %%Z in (%big%) do (set big!cnt!=%%Z&set /a "cnt+=1")

::The Main Thing
for %%. in (42,27,1090,230000,1001100,-40309,0,123456789) do (
	set input=%%.
	if %%. lss 0 (set /a input*=-1)
	if !input! equ 0 (set TotalOut=Zero) else (
		call :num_word %%.
	)
	echo "!TotalOut!"
)
exit /b
::/The Main Thing

::The Procedure
:num_word
	set outP=
	set unit=0
	set num=!input!
:num_loop
set /a tmpLng1 = num %% 100
set /a tmpLng2 = tmpLng1 %% 10
set /a tmpNum1 = tmpLng1/10 - 2
 
if !tmpLng1! geq 1 if !tmpLng1! leq 19 (
	set "outP=!small%tmpLng1%! !outP!"
)
if !tmpLng1! geq 20 if !tmpLng1! leq 99 (
	if !tmpLng2! equ 0 (
		set "outP=!decade%tmpNum1%! !outP!"
	) else (
		set "outP=!decade%tmpNum1%!-!small%tmpLng2%! !outP!"
	)
)
 
set /a tmpLng1 = (num %% 1000)/100
if not !tmpLng1! equ 0 (
	set "outP=!small%tmpLng1%! Hundred !outP!"
)
 
set /a num/=1000
if !num! lss 1 goto :break_loop
 
set /a tmpLng1 = num %% 1000
if not !tmpLng1! equ 0 (
	set "outP=!big%unit%! !outP!"
)
set /a unit+=1
goto :num_loop
 
:break_loop
set "TotalOut=!outP!"
if %1 lss 0 set "TotalOut=Negative !outP!"
 
set TotalOut=%TotalOut:~0,-1%
goto :EOF