Last active
August 29, 2015 13:58
-
-
Save oshanz/9929292 to your computer and use it in GitHub Desktop.
Convert Numbers to Words
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
PHP or Javascript |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//http://www.easysurf.cc/cnvert18.htm | |
function GetNumber2d(form) { | |
var gf = "" | |
var gg = "" | |
var gh = "" | |
var gi = "" | |
var gj = "" | |
var gc = "zero" | |
var dd = "" | |
var cc = "" | |
var sNumber = form.txtNumber.value; | |
var sNumbec = form.txtNumbe2.value; | |
sNumber = stripBad(sNumber); | |
sNumber = parseInt(sNumber, 10); | |
var sNum2 = String(sNumber); | |
sNumbec = stripBad(sNumbec); | |
sNumbec = parseInt(sNumbec, 10); | |
var sNumc = String(sNumbec); | |
if (sNumber == 1){dd = " dollar "} | |
else {dd = " dollars "} | |
if (sNumbec == 1){cc = " cent"} | |
else {cc = " cents"} | |
if (sNumbec < 1){gc = "zero"} | |
if (sNumc=="") {gc = "zero"} | |
if (sNumc > 0) {gc = hto(sNumc)} | |
var j = sNum2.length | |
var hNum2 = sNum2.substring((j-3),((j-3)+3)) | |
if (hNum2 > 0) { | |
gf = hto(hNum2) + "" | |
} | |
var tNum2 = sNum2.substring((j-6),(j-6)+3) | |
if (tNum2 > 0) { | |
gg = hto(tNum2) + " thousand " | |
} | |
var mNum2 = sNum2.substring((j-9),(j-9)+3) | |
if (mNum2 > 0) { | |
gh = hto(mNum2) + " million " | |
} | |
var bNum2 = sNum2.substring((j-12),(j-12)+3) | |
if (bNum2 > 0) { | |
gi = hto(bNum2) + " billion " | |
} | |
var trNum2 = sNum2.substring((j-15),(j-15)+3) | |
if (trNum2 > 0) { | |
gj = hto(trNum2) + " trillion " | |
} | |
if (sNumber < 1){ | |
gf = "zero" | |
} | |
if (j > 15){ | |
gj = " Your number is too big for me to spell"; | |
gi = ""; | |
gh = ""; | |
gg = ""; | |
gf = ""; | |
} | |
var dds = gj + gi + gh + gg + gf; | |
if (dds == ""){dds = "zero"} | |
form.txtResult.value= " " + dds + dd + " and " + gc + " " + cc} | |
function GetNumber2e(form) { | |
var gf = "" | |
var gg = "" | |
var gh = "" | |
var gi = "" | |
var gj = "" | |
var gc = "zero" | |
var dd = "" | |
var cc = "" | |
var sNumber = form.txtNumber.value; | |
var sNumbec = form.txtNumbe2.value; | |
sNumber = stripBad(sNumber); | |
sNumber = parseInt(sNumber, 10); | |
var sNum2 = String(sNumber); | |
sNumbec = stripBad(sNumbec); | |
sNumbec = parseInt(sNumbec, 10); | |
var sNumc = String(sNumbec); | |
dd = " euro "; | |
cc = " cent"; | |
if (sNumbec < 1){gc = "zero"} | |
if (sNumc=="") {gc = "zero"} | |
if (sNumc > 0) {gc = hto(sNumc)} | |
var j = sNum2.length | |
var hNum2 = sNum2.substring((j-3),((j-3)+3)) | |
if (hNum2 > 0) { | |
gf = hto(hNum2) + "" | |
} | |
var tNum2 = sNum2.substring((j-6),(j-6)+3) | |
if (tNum2 > 0) { | |
gg = hto(tNum2) + " thousand " | |
} | |
var mNum2 = sNum2.substring((j-9),(j-9)+3) | |
if (mNum2 > 0) { | |
gh = hto(mNum2) + " million " | |
} | |
var bNum2 = sNum2.substring((j-12),(j-12)+3) | |
if (bNum2 > 0) { | |
gi = hto(bNum2) + " billion " | |
} | |
var trNum2 = sNum2.substring((j-15),(j-15)+3) | |
if (trNum2 > 0) { | |
gj = hto(trNum2) + " trillion " | |
} | |
if (sNumber < 1){ | |
gf = "zero" | |
} | |
if (j > 15){ | |
gj = " Your number is too big for me to spell"; | |
gi = ""; | |
gh = ""; | |
gg = ""; | |
gf = ""; | |
} | |
var dds = gj + gi + gh + gg + gf; | |
if (dds == ""){dds = "zero"} | |
form.txtResult.value= " " + dds + dd + " and " + gc + " " + cc} | |
function GetNumber2(form) { | |
var gf = "" | |
var gg = "" | |
var gh = "" | |
var gi = "" | |
var gj = "" | |
var sNumber = form.txtNumber.value; | |
sNumber = stripBad(sNumber); | |
sNumber = parseInt(sNumber, 10); | |
var sNum2 = String(sNumber); | |
var j = sNum2.length | |
var hNum2 = sNum2.substring((j-3),((j-3)+3)) | |
if (hNum2 > 0) { | |
gf = hto(hNum2) + "" | |
} | |
var tNum2 = sNum2.substring((j-6),(j-6)+3) | |
if (tNum2 > 0) { | |
gg = hto(tNum2) + " thousand " | |
} | |
var mNum2 = sNum2.substring((j-9),(j-9)+3) | |
if (mNum2 > 0) { | |
gh = hto(mNum2) + " million " | |
} | |
var bNum2 = sNum2.substring((j-12),(j-12)+3) | |
if (bNum2 > 0) { | |
gi = hto(bNum2) + " billion " | |
} | |
var trNum2 = sNum2.substring((j-15),(j-15)+3) | |
if (trNum2 > 0) { | |
gj = hto(trNum2) + " trillion " | |
} | |
if (sNumber < 1){ | |
gf = "zero" | |
} | |
if (j > 15){ | |
gj = " Your number is too big for me to spell"; | |
gi = ""; | |
gh = ""; | |
gg = ""; | |
gf = ""; | |
} | |
form.txtResult.value= " " + gj + gi + gh + gg + gf } | |
function GetNumber3(form) { | |
var gf = "" | |
var gg = "" | |
var gh = "" | |
var gi = "" | |
var gj = "" | |
var gs = "s" | |
var n3 = new Array('', 'tenth', 'hundredth', 'thousandth', 'ten-thousandth', 'hundred-thousandth', | |
'millionth', 'ten-millionth', 'hundred-millionth', 'billionth', 'ten-billionth', 'hundred-billionth', | |
'trillionth', 'ten-trillionth', 'hundred-trillionth') | |
var sNumber = form.txtNumber.value; | |
sNumber = stripBad2(sNumber); | |
var jz = sNumber.length | |
sNumber = parseInt(sNumber, 10); | |
if (sNumber == 1) { | |
gs = ""} | |
var sNum2 = String(sNumber); | |
var j = sNum2.length | |
var hNum2 = sNum2.substring((j-3),((j-3)+3)) | |
if (hNum2 > 0) { | |
gf = hto(hNum2) + "" | |
} | |
var tNum2 = sNum2.substring((j-6),(j-6)+3) | |
if (tNum2 > 0) { | |
gg = hto(tNum2) + " thousand " | |
} | |
var mNum2 = sNum2.substring((j-9),(j-9)+3) | |
if (mNum2 > 0) { | |
gh = hto(mNum2) + " million " | |
} | |
var bNum2 = sNum2.substring((j-12),(j-12)+3) | |
if (bNum2 > 0) { | |
gi = hto(bNum2) + " billion " | |
} | |
var trNum2 = sNum2.substring((j-15),(j-15)+3) | |
if (trNum2 > 0) { | |
gj = hto(trNum2) + " trillion " | |
} | |
if (sNumber < 1){ | |
gf = "zero" | |
} | |
if (jz > 14){ | |
gj = " Your number is too small for me to spell"; | |
gi = ""; | |
gh = ""; | |
gg = ""; | |
gf = ""; | |
gs = ""; | |
n3[jz]= ""; | |
} | |
form.txtResult.value= " " + gj + gi + gh + gg + gf + " " + n3[jz] + gs} | |
function GetNumber5(form) { | |
var gf = ""; | |
var gg = ""; | |
var gh = ""; | |
var gi = ""; | |
var gj = ""; | |
var sNumber = form.txtNumber.value; | |
sNumber = stripBad(sNumber); | |
sNumber = parseInt(sNumber, 10); | |
var sNum2 = String(sNumber); | |
var j = sNum2.length; | |
var hNum2 = sNum2.substring((j-3),((j-3)+3)) | |
if (hNum2 > 0) { | |
gf = hto(hNum2) + "" | |
} | |
var tNum2 = sNum2.substring((j-6),(j-6)+3) | |
if (tNum2 > 0) { | |
gg = hto(tNum2) + " thousand " | |
} | |
var mNum2 = sNum2.substring((j-9),(j-9)+3) | |
if (mNum2 > 0) { | |
gh = hto(mNum2) + " million " | |
} | |
var bNum2 = sNum2.substring((j-12),(j-12)+3) | |
if (bNum2 > 0) { | |
gi = hto(bNum2) + " billion " | |
} | |
var trNum2 = sNum2.substring((j-15),(j-15)+3) | |
if (trNum2 > 0) { | |
gj = hto(trNum2) + " trillion " | |
} | |
if (sNumber < 1){ | |
gf = "zero" | |
} | |
if (j > 15){ | |
gj = " Your number is too big for me to spell"; | |
gi = ""; | |
gh = ""; | |
gg = ""; | |
gf = ""; | |
} | |
var df = ""; | |
var dg = ""; | |
var dh = ""; | |
var di = ""; | |
var dj = ""; | |
var gs = "s"; | |
var n3 = new Array('', 'tenth', 'hundredth', 'thousandth', 'ten-thousandth', 'hundred-thousandth', | |
'millionth', 'ten-millionth', 'hundred-millionth', 'billionth', 'ten-billionth', 'hundred-billionth', | |
'trillionth', 'ten-trillionth', 'hundred-trillionth') | |
var dNumber = form.txtNumbe2.value; | |
dNumber = stripBad2(dNumber); | |
var jz = dNumber.length | |
dNumber = parseInt(dNumber, 10); | |
if (dNumber == 1) { | |
gs = ""} | |
var dNum2 = String(dNumber); | |
var j = dNum2.length | |
var hNum2 = dNum2.substring((j-3),((j-3)+3)) | |
if (hNum2 > 0) { | |
df = hto(hNum2) + "" | |
} | |
var tNum2 = dNum2.substring((j-6),(j-6)+3) | |
if (tNum2 > 0) { | |
dg = hto(tNum2) + " thousand " | |
} | |
var mNum2 = dNum2.substring((j-9),(j-9)+3) | |
if (mNum2 > 0) { | |
dh = hto(mNum2) + " million " | |
} | |
var bNum2 = dNum2.substring((j-12),(j-12)+3) | |
if (bNum2 > 0) { | |
di = hto(bNum2) + " billion " | |
} | |
var trNum2 = dNum2.substring((j-15),(j-15)+3) | |
if (trNum2 > 0) { | |
dj = hto(trNum2) + " trillion " | |
} | |
if (dNumber < 1){ | |
df = "zero" | |
} | |
if (jz > 14){ | |
dj = " Your number is too small for me to spell"; | |
di = ""; | |
dh = ""; | |
dg = ""; | |
df = ""; | |
gs = ""; | |
n3[jz]= ""; | |
} | |
form.txtResult.value= " " + gj + gi + gh + gg + gf + " and " + dj + di + dh + dg + df + " " + n3[jz] + gs} | |
function GetNumber4(form) { | |
var gf = "" | |
var gg = "" | |
var gh = "" | |
var gi = "" | |
var gj = "" | |
var sNumber = form.txtNumber.value; | |
sNumber = stripBad(sNumber); | |
sNumber = parseInt(sNumber, 10); | |
var sNum2 = String(sNumber); | |
var j = sNum2.length | |
var hNum2 = sNum2.substring((j-3),((j-3)+3)) | |
if (hNum2 > 0) { | |
gf = ohto(hNum2) + "" | |
} | |
var tNum2 = sNum2.substring((j-6),(j-6)+3) | |
if ((tNum2 > 0)&&(hNum2 > 0)) { | |
gg = hto(tNum2) + " thousand " | |
} | |
else if ((tNum2 > 0)&&(hNum2 == 0)) { | |
gg = hto(tNum2) + " thousandth " | |
} | |
var mNum2 = sNum2.substring((j-9),(j-9)+3) | |
var tNum6 = sNum2.substring((j-6),(j-6)+6) | |
if ((mNum2 > 0)&&(tNum6 > 0)) { | |
gh = hto(mNum2) + " million " | |
} | |
else if ((mNum2 > 0)&&(tNum6 == 0)) { | |
gh = hto(mNum2) + " millionth " | |
} | |
var bNum2 = sNum2.substring((j-12),(j-12)+3) | |
var tNum9 = sNum2.substring((j-9),(j-9)+9) | |
if ((bNum2 > 0)&&(tNum9 > 0)) { | |
gi = hto(bNum2) + " billion " | |
} | |
else if ((bNum2 > 0)&&(tNum9 == 0)) { | |
gi = hto(bNum2) + " billionth " | |
} | |
var trNum2 = sNum2.substring((j-15),(j-15)+3) | |
var tNum12 = sNum2.substring((j-12),(j-12)+12) | |
if ((trNum2 > 0)&&(tNum12 > 0)) { | |
gj = hto(trNum2) + " trillion " | |
} | |
else if ((trNum2 > 0)&&(tNum12 == 0)) { | |
gj = hto(trNum2) + " trillionth " | |
} | |
if (sNumber < 1){ | |
gf = "zero cannot be an ordinal number" | |
} | |
if (j > 15){ | |
gj = " Your number is too big for me to spell"; | |
gi = ""; | |
gh = ""; | |
gg = ""; | |
gf = ""; | |
} | |
form.txtResult.value= " " + gj + gi + gh + gg + gf } | |
function stripBad(string) { | |
for (var i=0, output='', valid="0123456789."; i<string.length; i++) | |
if (valid.indexOf(string.charAt(i)) != -1) | |
output += string.charAt(i) | |
return output; | |
} | |
function stripBad2(string) { | |
for (var i=0, output='', valid="0123456789"; i<string.length; i++) | |
if (valid.indexOf(string.charAt(i)) != -1) | |
output += string.charAt(i) | |
return output; | |
} | |
function hto(ff){ | |
var sNum3 = "" | |
var p1="" | |
var p2="" | |
var p3="" | |
var hy="" | |
var n1 = new Array | |
('', 'one', 'two', 'three', 'four', 'five', 'six', | |
'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', | |
'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', | |
'eighteen', 'nineteen') | |
var n2 = new Array('', '', 'twenty', 'thirty', 'forty', | |
'fifty', 'sixty', 'seventy', 'eighty', 'ninety') | |
sNum3 = ff | |
var j = sNum3.length | |
var h3 = sNum3.substring((j-3),(j-3)+1) | |
if (h3 > 0) { | |
p3= n1[h3] + " hundred "} | |
else {p3=""} | |
var t2 = parseInt(sNum3.substring((j-2),(j-2)+1), 10) | |
var u1 = parseInt(sNum3.substring((j-1),(j-1)+1), 10) | |
var tu21 = parseInt(sNum3.substring((j-2),(j-2)+2), 10) | |
if (tu21 == 0) { | |
p1=""; | |
p2=""; | |
} | |
else if ((t2 < 1) && (u1 > 0)) { | |
p2=""; | |
p1= n1[u1] | |
} | |
else if (tu21 < 20) { | |
p2=""; | |
p1= n1[tu21] | |
} | |
else if ((t2 > 1) && (u1 == 0)) { | |
p2= n2[t2] | |
p1="" | |
} | |
else { | |
p2= n2[t2] + "-" | |
p1=n1[u1] | |
} | |
ff = p3 + p2 + p1 | |
return ff; | |
} | |
function ohto(ff){ | |
var sNum3 = "" | |
var p1="" | |
var p2="" | |
var p3="" | |
var hy="" | |
var n1 = new Array | |
('', 'first', 'second', 'third', 'fourth', 'fifth', 'sixth', | |
'seventh', 'eighth', 'ninth', 'tenth', 'eleventh', 'twelfth', | |
'thirteenth', 'fourteenth', 'fifteenth', 'sixteenth', 'seventeenth', | |
'eighteenth', 'nineteenth') | |
var n2 = new Array('', '', 'twentieth', 'thirtieth', 'fortieth', | |
'fiftieth', 'sixtieth', 'seventieth', 'eightieth', 'ninetieth') | |
var n3 = new Array('', '', 'twenty', 'thirty', 'forty', | |
'fifty', 'sixty', 'seventy', 'eighty', 'ninety') | |
var n4 = new Array | |
('', 'one', 'two', 'three', 'four', 'five', 'six', | |
'seven', 'eight', 'nine', 'ten', 'eleven', 'twelve', | |
'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', | |
'eighteen', 'nineteen') | |
sNum3 = ff | |
var j = sNum3.length | |
var h3 = sNum3.substring((j-3),(j-3)+1) | |
if (h3 > 0) { | |
p3= n4[h3] + " hundred "} | |
else {p3=""} | |
var t2 = parseInt(sNum3.substring((j-2),(j-2)+1), 10) | |
var u1 = parseInt(sNum3.substring((j-1),(j-1)+1), 10) | |
var tu21 = parseInt(sNum3.substring((j-2),(j-2)+2), 10) | |
if (tu21 == 0) { | |
p1=""; | |
p2=""; | |
p3= n4[h3] + " hundredth " | |
} | |
else if ((t2 < 1) && (u1 > 0)) { | |
p2=""; | |
p1= n1[u1] | |
} | |
else if (tu21 < 20) { | |
p2=""; | |
p1= n1[tu21] | |
} | |
else if ((t2 > 1) && (u1 == 0)) { | |
p2= n2[t2] | |
p1="" | |
} | |
else { | |
p2= n3[t2] + "-" | |
p1=n1[u1] | |
} | |
ff = p3 + p2 + p1 | |
return ff; | |
} | |
function gesult(ff){ | |
if (Number.prototype.toFixed) { | |
ff = ff.toFixed(2); | |
ff = parseFloat(ff); | |
} | |
else { | |
var leftSide = Math.floor(ff); | |
var rightSide = ff - leftSide; | |
ff = leftSide + Math.round(rightSide *1e+14)/1e+14; | |
} | |
return comma(ff); | |
} | |
function comma(num) { | |
var n = Math.floor(num); | |
var myNum = num + ""; | |
var myDec = "" | |
if (myNum.indexOf('.',0) > -1){ | |
myDec = myNum.substring(myNum.indexOf('.',0),myNum.length); | |
} | |
var arr=new Array('0'), i=0; | |
while (n>0) | |
{arr[i]=''+n%1000; n=Math.floor(n/1000); i++;} | |
arr=arr.reverse(); | |
for (var i in arr) if (i>0) | |
while (arr[i].length<3) arr[i]='0'+arr[i]; | |
return arr.join() + myDec; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
echo convert_number_to_words(123456789); | |
// one hundred and twenty-three million, four hundred and fifty-six thousand, seven hundred and eighty-nine | |
echo convert_number_to_words(123456789.123); | |
// one hundred and twenty-three million, four hundred and fifty-six thousand, seven hundred and eighty-nine point one two three | |
echo convert_number_to_words(-1922685.477); | |
// negative one million, nine hundred and twenty-two thousand, six hundred and eighty-five point four seven seven | |
// float rounding can be avoided by passing the number as a string | |
echo convert_number_to_words(123456789123.12345); // rounds the fractional part | |
// one hundred and twenty-three billion, four hundred and fifty-six million, seven hundred and eighty-nine thousand, one hundred and twenty-three point one two | |
echo convert_number_to_words('123456789123.12345'); // does not round | |
// one hundred and twenty-three billion, four hundred and fifty-six million, seven hundred and eighty-nine thousand, one hundred and twenty-three point one two three four five | |
function convert_number_to_words($number) { | |
$hyphen = '-'; | |
$conjunction = ' and '; | |
$separator = ', '; | |
$negative = 'negative '; | |
$decimal = ' point '; | |
$dictionary = array( | |
0 => 'zero', | |
1 => 'one', | |
2 => 'two', | |
3 => 'three', | |
4 => 'four', | |
5 => 'five', | |
6 => 'six', | |
7 => 'seven', | |
8 => 'eight', | |
9 => 'nine', | |
10 => 'ten', | |
11 => 'eleven', | |
12 => 'twelve', | |
13 => 'thirteen', | |
14 => 'fourteen', | |
15 => 'fifteen', | |
16 => 'sixteen', | |
17 => 'seventeen', | |
18 => 'eighteen', | |
19 => 'nineteen', | |
20 => 'twenty', | |
30 => 'thirty', | |
40 => 'fourty', | |
50 => 'fifty', | |
60 => 'sixty', | |
70 => 'seventy', | |
80 => 'eighty', | |
90 => 'ninety', | |
100 => 'hundred', | |
1000 => 'thousand', | |
1000000 => 'million', | |
1000000000 => 'billion', | |
1000000000000 => 'trillion', | |
1000000000000000 => 'quadrillion', | |
1000000000000000000 => 'quintillion' | |
); | |
if (!is_numeric($number)) { | |
return false; | |
} | |
if (($number >= 0 && (int) $number < 0) || (int) $number < 0 - PHP_INT_MAX) { | |
// overflow | |
trigger_error( | |
'convert_number_to_words only accepts numbers between -' . PHP_INT_MAX . ' and ' . PHP_INT_MAX, | |
E_USER_WARNING | |
); | |
return false; | |
} | |
if ($number < 0) { | |
return $negative . convert_number_to_words(abs($number)); | |
} | |
$string = $fraction = null; | |
if (strpos($number, '.') !== false) { | |
list($number, $fraction) = explode('.', $number); | |
} | |
switch (true) { | |
case $number < 21: | |
$string = $dictionary[$number]; | |
break; | |
case $number < 100: | |
$tens = ((int) ($number / 10)) * 10; | |
$units = $number % 10; | |
$string = $dictionary[$tens]; | |
if ($units) { | |
$string .= $hyphen . $dictionary[$units]; | |
} | |
break; | |
case $number < 1000: | |
$hundreds = $number / 10 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment