问题
I just need a little help here. Because I am creating a code for converting decimals to Money format in words. For example if
I have this number
'2143.45'
the output should be
'two thousand one hundred forty three and forty-five cents'
I found a code like this but I don't have an idea how to include cents.
<?php
function convertNumber($number)
{
list($integer, $fraction) = explode(".", (string) $number);
$output = "";
if ($integer{0} == "-")
{
$output = "negative ";
$integer = ltrim($integer, "-");
}
else if ($integer{0} == "+")
{
$output = "positive ";
$integer = ltrim($integer, "+");
}
if ($integer{0} == "0")
{
$output .= "zero";
}
else
{
$integer = str_pad($integer, 36, "0", STR_PAD_LEFT);
$group = rtrim(chunk_split($integer, 3, " "), " ");
$groups = explode(" ", $group);
$groups2 = array();
foreach ($groups as $g)
{
$groups2[] = convertThreeDigit($g{0}, $g{1}, $g{2});
}
for ($z = 0; $z < count($groups2); $z++)
{
if ($groups2[$z] != "")
{
$output .= $groups2[$z] . convertGroup(11 - $z) . (
$z < 11
&& !array_search('', array_slice($groups2, $z + 1, -1))
&& $groups2[11] != ''
&& $groups[11]{0} == '0'
? " and "
: ", "
);
}
}
$output = rtrim($output, ", ");
}
if ($fraction > 0)
{
$output .= " point";
for ($i = 0; $i < strlen($fraction); $i++)
{
$output .= " " . convertDigit($fraction{$i});
}
}
return $output;
}
function convertGroup($index)
{
switch ($index)
{
case 11:
return " decillion";
case 10:
return " nonillion";
case 9:
return " octillion";
case 8:
return " septillion";
case 7:
return " sextillion";
case 6:
return " quintrillion";
case 5:
return " quadrillion";
case 4:
return " trillion";
case 3:
return " billion";
case 2:
return " million";
case 1:
return " thousand";
case 0:
return "";
}
}
function convertThreeDigit($digit1, $digit2, $digit3)
{
$buffer = "";
if ($digit1 == "0" && $digit2 == "0" && $digit3 == "0")
{
return "";
}
if ($digit1 != "0")
{
$buffer .= convertDigit($digit1) . " hundred";
if ($digit2 != "0" || $digit3 != "0")
{
$buffer .= " and ";
}
}
if ($digit2 != "0")
{
$buffer .= convertTwoDigit($digit2, $digit3);
}
else if ($digit3 != "0")
{
$buffer .= convertDigit($digit3);
}
return $buffer;
}
function convertTwoDigit($digit1, $digit2)
{
if ($digit2 == "0")
{
switch ($digit1)
{
case "1":
return "ten";
case "2":
return "twenty";
case "3":
return "thirty";
case "4":
return "forty";
case "5":
return "fifty";
case "6":
return "sixty";
case "7":
return "seventy";
case "8":
return "eighty";
case "9":
return "ninety";
}
} else if ($digit1 == "1")
{
switch ($digit2)
{
case "1":
return "eleven";
case "2":
return "twelve";
case "3":
return "thirteen";
case "4":
return "fourteen";
case "5":
return "fifteen";
case "6":
return "sixteen";
case "7":
return "seventeen";
case "8":
return "eighteen";
case "9":
return "nineteen";
}
} else
{
$temp = convertDigit($digit2);
switch ($digit1)
{
case "2":
return "twenty-$temp";
case "3":
return "thirty-$temp";
case "4":
return "forty-$temp";
case "5":
return "fifty-$temp";
case "6":
return "sixty-$temp";
case "7":
return "seventy-$temp";
case "8":
return "eighty-$temp";
case "9":
return "ninety-$temp";
}
}
}
function convertDigit($digit)
{
switch ($digit)
{
case "0":
return "zero";
case "1":
return "one";
case "2":
return "two";
case "3":
return "three";
case "4":
return "four";
case "5":
return "five";
case "6":
return "six";
case "7":
return "seven";
case "8":
return "eight";
case "9":
return "nine";
}
}
$num = 500254.89;
$test = convertNumber($num);
echo $test;
?>
回答1:
There's a PEAR library that can do this.
EDIT
Or you can, at the end of your code, do this
echo $test . ' cents';
回答2:
indian version
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',
100000 => 'lakh',
10000000 => 'crore'
);
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 . $this->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 / 100;
$remainder = $number % 100;
$string = $dictionary[$hundreds] . ' ' . $dictionary[100];
if ($remainder) {
$string .= $conjunction . $this->convert_number_to_words($remainder);
}
break;
case $number < 100000:
$thousands = ((int) ($number / 1000));
$remainder = $number % 1000;
$thousands = $this->convert_number_to_words($thousands);
$string .= $thousands . ' ' . $dictionary[1000];
if ($remainder) {
$string .= $separator . $this->convert_number_to_words($remainder);
}
break;
case $number < 10000000:
$lakhs = ((int) ($number / 100000));
$remainder = $number % 100000;
$lakhs = $this->convert_number_to_words($lakhs);
$string = $lakhs . ' ' . $dictionary[100000];
if ($remainder) {
$string .= $separator . $this->convert_number_to_words($remainder);
}
break;
case $number < 1000000000:
$crores = ((int) ($number / 10000000));
$remainder = $number % 10000000;
$crores = $this->convert_number_to_words($crores);
$string = $crores . ' ' . $dictionary[10000000];
if ($remainder) {
$string .= $separator . $this->convert_number_to_words($remainder);
}
break;
default:
$baseUnit = pow(1000, floor(log($number, 1000)));
$numBaseUnits = (int) ($number / $baseUnit);
$remainder = $number % $baseUnit;
$string = $this->convert_number_to_words($numBaseUnits) . ' ' . $dictionary[$baseUnit];
if ($remainder) {
$string .= $remainder < 100 ? $conjunction : $separator;
$string .= $this->convert_number_to_words($remainder);
}
break;
}
if (null !== $fraction && is_numeric($fraction)) {
$string .= $decimal;
$words = array();
foreach (str_split((string) $fraction) as $number) {
$words[] = $dictionary[$number];
}
$string .= implode(' ', $words);
}
return $string;
}
回答3:
<?php function numtowords($num){
$decones = array(
'01' => "One",
'02' => "Two",
'03' => "Three",
'04' => "Four",
'05' => "Five",
'06' => "Six",
'07' => "Seven",
'08' => "Eight",
'09' => "Nine",
10 => "Ten",
11 => "Eleven",
12 => "Twelve",
13 => "Thirteen",
14 => "Fourteen",
15 => "Fifteen",
16 => "Sixteen",
17 => "Seventeen",
18 => "Eighteen",
19 => "Nineteen"
);
$ones = array(
0 => " ",
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"
);
$tens = array(
0 => "",
2 => "Twenty",
3 => "Thirty",
4 => "Forty",
5 => "Fifty",
6 => "Sixty",
7 => "Seventy",
8 => "Eighty",
9 => "Ninety"
);
$hundreds = array(
"Hundred",
"Thousand",
"Million",
"Billion",
"Trillion",
"Quadrillion"
); //limit t quadrillion
$num = number_format($num,2,".",",");
$num_arr = explode(".",$num);
$wholenum = $num_arr[0];
$decnum = $num_arr[1];
$whole_arr = array_reverse(explode(",",$wholenum));
krsort($whole_arr);
$rettxt = "";
foreach($whole_arr as $key => $i){
if($i < 20){
$rettxt .= $ones[$i];
}
elseif($i < 100){
$rettxt .= $tens[substr($i,0,1)];
$rettxt .= " ".$ones[substr($i,1,1)];
}
else{
$rettxt .= $ones[substr($i,0,1)]." ".$hundreds[0];
$rettxt .= " ".$tens[substr($i,1,1)];
$rettxt .= " ".$ones[substr($i,2,1)];
}
if($key > 0){
$rettxt .= " ".$hundreds[$key]." ";
}
}
$rettxt = $rettxt." peso/s";
if($decnum > 0){
$rettxt .= " and ";
if($decnum < 20){
$rettxt .= $decones[$decnum];
}
elseif($decnum < 100){
$rettxt .= $tens[substr($decnum,0,1)];
$rettxt .= " ".$ones[substr($decnum,1,1)];
}
$rettxt = $rettxt." centavo/s";
}
return $rettxt;} ?>
you can use this by
echo numtowords(156.50);
output is
One Hundred Fifty Six peso/s and Fifty centavo/s only.
Credit to the owner: Alex Culango PS: i've edited some lines because it has some error when the tens have "0" and also for proper decimal conversion to words and the peso and centavo placement.
回答4:
If you don't want to edit the function, a quick and dirty way you can do this is by hacking the parts where it prints the words, like this: http://pastebin.com/UwSR8NpV It should work like the way you wanted it to.
回答5:
The function you are using is fine .
For
2143.45
I think the output should be :
two thousand one hundred forty three and four five cents
And not :
two thousand one hundred forty three and forty five cents
But if you would like it that way , you can still use the function you are using .
Definitely a longer way of achieving it !!! :
$testNumber = '2143.45';
$tempNum = explode( '.' , $testNumber );
$convertedNumber = ( isset( $tempNum[0] ) ? convertNumber( $tempNum[0] ) : '' );
// Use the below line if you don't want 'and' in the number before decimal point
$convertedNumber = str_replace( ' and ' ,' ' ,$convertedNumber );
// In the below line if you want you can replace ' and ' with ' , '
$convertedNumber .= ( ( isset( $tempNum[0] ) and isset( $tempNum[1] ) ) ? ' and ' : '' );
$convertedNumber .= ( isset( $tempNum[1] ) ? convertNumber( $tempNum[1] ) .' cents' : '' );
echo $convertedNumber;
Displays :
two thousand, one hundred forty-three and forty-five cents
You can also incorporate the above code lines in to your converNumber
function where it is translating the faction part if ($fraction > 0){ }
.
回答6:
For Indian Currnecy
For Indian Currency
<html>
<head>
<title> Number to word converter</title>
</head>
<body>
<?php
$ones =array('',' One',' Two',' Three',' Four',' Five',' Six',' Seven',' Eight',' Nine',' Ten',' Eleven',' Twelve',' Thirteen',' Fourteen',' Fifteen',' Sixteen',' Seventeen',' Eighteen',' Nineteen');
$tens = array('','',' Twenty',' Thirty',' Fourty',' Fifty',' Sixty',' Seventy',' Eighty',' Ninety',);
$triplets = array('',' Thousand',' Lac',' Crore',' Arab',' Kharab');
function Show_Amount_In_Words($num) {
global $ones, $tens, $triplets;
$str ="";
//$num =(int)$num;
$th= (int)($num/1000);
$x = (int)($num/100) %10;
$fo= explode('.',$num);
if($fo[0] !=null){
$y=(int) substr($fo[0],-2);
}else{
$y=0;
}
if($x > 0){
$str =$ones[$x].' Hundred';
}
if($y>0){
if($y<20)
{
$str .=$ones[$y];
}
else {
$str .=$tens[($y/10)].$ones[($y%10)];
}
}
$tri=1;
while($th!=0){
$lk = $th%100;
$th = (int)($th/100);
$count =$tri;
if($lk<20){
if($lk == 0){
$tri =0;}
$str = $ones[$lk].$triplets[$tri].$str;
$tri=$count;
$tri++;
}else{
$str = $tens[$lk/10].$ones[$lk%10].$triplets[$tri].$str;
$tri++;
}
}
$num =(float)$num;
if(is_float($num)){
$fo= (String) $num;
$fo= explode('.',$fo);
$fo1= @$fo[1];
}else{
$fo1 =0;
}
$check = (int) $num;
if($check !=0){
return $str.' Rupees'.forDecimal($fo1);
}else{
return forDecimal($fo1);
}
}//End function Show_Amount_In_Words
if(isset($_POST['num'])){
$num = $_POST['num'];
echo Show_Amount_In_Words($num);
}
//function for decimal parts
function forDecimal($num){
global $ones,$tens;
$str="";
$len = strlen($num);
if($len==1){
$num=$num*10;
}
$x= $num%100;
if($x>0){
if($x<20){
$str = $ones[$x].' Paise';
}else{
$str = $tens[$x/10].$ones[$x%10].' Paise';
}
}
return $str;
}
?>
<form action='#' method='post'>
<input type='text' name='num' size='20'>
<input type='submit' name='submit' />
</form>
</body>
</html>
回答7:
<?php
$price = mysqli_real_escape_string($conn, $_GET['price']);
$adprice = mysqli_real_escape_string($conn, $_GET['adprice']);
$number = $price-$adprice;
$no = round($number);
$point = round($number - $no, 2) * 100;
$hundred = null;
$digits_1 = strlen($no);
$i = 0;
$str = array();
$words = array('0' => '', '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' => 'Forty', '50' => 'Fifty',
'60' => 'Sixty', '70' => 'Seventy',
'80' => 'Eighty', '90' => 'Ninety');
$digits = array('', 'Hundred', 'Thousand', 'Lakh', 'Crore');
while ($i < $digits_1) {
$divider = ($i == 2) ? 10 : 100;
$number = floor($no % $divider);
$no = floor($no / $divider);
$i += ($divider == 10) ? 1 : 2;
if ($number) {
$plural = (($counter = count($str)) && $number > 9) ? 's' : null;
$hundred = ($counter == 1 && $str[0]) ? ' and ' : null;
$str [] = ($number < 21) ? $words[$number] .
" " . $digits[$counter] . $plural . " " . $hundred
:
$words[floor($number / 10) * 10]
. " " . $words[$number % 10] . " "
. $digits[$counter] . $plural . " " . $hundred;
} else $str[] = null;
}
$str = array_reverse($str);
$result = implode('', $str);
$points = ($point) ?
"." . $words[$point / 10] . " " .
$words[$point = $point % 10] : '';
echo $result . " " . $points . "Only ";
?>
回答8:
Hi i have solved this problem using php
See this following link Stackoverflow Best Conversion Result for Indian Currency format
回答9:
I tried to add something for the decimal value. Hope it will help.
<?php
function convertNumber($number)
{
list($integer,$fraction) = explode(".", (string) $number);
$output = " ";
if ($integer{0} == "-")
{
$output = "negative ";
$integer = ltrim($integer, "-");
}
else if ($integer{0} == "+")
{
$output = "positive ";
$integer = ltrim($integer, "+");
}
if ($integer{0} == "0")
{
$output .= "zero";
}
else
{
$integer = str_pad($integer, 36, "0", STR_PAD_LEFT);
$group = rtrim(chunk_split($integer, 3, " "), " ");
$groups = explode(" ", $group);
$groups2 = array();
foreach ($groups as $g)
{
$groups2[] = convertThreeDigit($g{0}, $g{1}, $g{2});
}
for ($z = 0; $z < count($groups2); $z++)
{
if ($groups2[$z] != "")
{
$output .= $groups2[$z] . convertGroup(11 - $z) . (
$z < 11
&& !array_search('', array_slice($groups2, $z + 1, -1))
&& $groups2[11] != ''
&& $groups[11]{0} == '0'
? " and "
: " "
);
}
}
$output = rtrim($output, ", ");
}
if ($fraction > 0)
{
$output .= " PESOS ";
for ($i = 0; $i < strlen($fraction); $i++)
{
if($fraction==01){
$i = 1;
while ($i <2):
$output .= " and one centavo only";
$i++;
endwhile;
}
else if($fraction==02){
$i = 1;
while ($i <2):
$output .= " and two centavos only";
$i++;
endwhile;
}
else if($fraction==03){
$i = 1;
while ($i <2):
$output .= " and three centavos only";
$i++;
endwhile;
}
else if($fraction==04){
$i = 1;
while ($i <2):
$output .= " and four centavos only";
$i++;
endwhile;
}
else if($fraction==05){
$i = 1;
while ($i <2):
$output .= " and five centavos only";
$i++;
endwhile;
}
else if($fraction==06){
$i = 1;
while ($i <2):
$output .= " and six centavos only";
$i++;
endwhile;
}
else if($fraction==07){
$i = 1;
while ($i <2):
$output .= " point seven centavos only";
$i++;
endwhile;
}
else if($fraction==8 || $fraction==08){
$i = 1;
while ($i <2):
$output .= " and eight centavos only";
$i++;
endwhile;
}
else if($fraction==9 || $fraction==09){
$i = 1;
while ($i <2):
$output .= " and nine centavos only";
$i++;
endwhile;
}
else if($fraction==10){
$i = 1;
while ($i <2):
$output .= " and ten centavos only";
$i++;
endwhile;
}
else if($fraction==11){
$i = 1;
while ($i <2):
$output .= " and eleven centavos only";
$i++;
endwhile;
}
else if($fraction==12){
$i = 1;
while ($i <2):
$output .= " and twelve centavos only";
$i++;
endwhile;
}
else if($fraction==13){
$i = 1;
while ($i <2):
$output .= " and thirteen centavos only";
$i++;
endwhile;
}
else if($fraction==14){
$i = 1;
while ($i <2):
$output .= " and fourteen centavos only";
$i++;
endwhile;
}
else if($fraction==15){
$i = 1;
while ($i <2):
$output .= " and fifteen centavos only";
$i++;
endwhile;
}
else if($fraction==16){
$i = 1;
while ($i <2):
$output .= " and sixteen centavos only";
$i++;
endwhile;
}
else if($fraction==17){
$i = 1;
while ($i <2):
$output .= " and seventeen centavos only";
$i++;
endwhile;
}
else if($fraction==18){
$i = 1;
while ($i <2):
$output .= " and eighteen centavos only";
$i++;
endwhile;
}
else if($fraction==19){
$i = 1;
while ($i <2):
$output .= " and nineteen centavos only";
$i++;
endwhile;
}
else if($fraction==20){
$i = 1;
while ($i <2):
$output .= " and twenty centavos only";
$i++;
endwhile;
}
else if($fraction==21){
$i = 1;
while ($i <2):
$output .= " and twenty one centavos only";
$i++;
endwhile;
}
else if($fraction==22){
$i = 1;
while ($i <2):
$output .= " and twenty two centavos only";
$i++;
endwhile;
}
else if($fraction==23){
$i = 1;
while ($i <2):
$output .= " and twenty three centavos only";
$i++;
endwhile;
}
else if($fraction==24){
$i = 1;
while ($i <2):
$output .= " and twenty four centavos only";
$i++;
endwhile;
}
else if($fraction==25){
$i = 1;
while ($i <2):
$output .= " and twenty five centavos only";
$i++;
endwhile;
}
else if($fraction==26){
$i = 1;
while ($i <2):
$output .= " and twenty six centavos only";
$i++;
endwhile;
}
else if($fraction==27){
$i = 1;
while ($i <2):
$output .= " and twenty seven centavos only";
$i++;
endwhile;
}
else if($fraction==28){
$i = 1;
while ($i <2):
$output .= " and twenty eight centavos only";
$i++;
endwhile;
}
else if($fraction==29){
$i = 1;
while ($i <2):
$output .= " and twenty nine centavos only";
$i++;
endwhile;
}
else if($fraction ==30){
$i = 1;
while ($i <2):
$output .= " and thirty centavos only";
$i++;
endwhile;
}
else if($fraction ==31){
$i = 1;
while ($i <2):
$output .= " and thirty one centavos only";
$i++;
endwhile;
}
else if($fraction ==32){
$i = 1;
while ($i <2):
$output .= " and thirty two centavos only";
$i++;
endwhile;
}
else if($fraction ==33){
$i = 1;
while ($i <2):
$output .= " and thirty three centavos only";
$i++;
endwhile;
}
else if($fraction ==34){
$i = 1;
while ($i <2):
$output .= " and thirty four centavos only";
$i++;
endwhile;
}
else if($fraction ==35){
$i = 1;
while ($i <2):
$output .= " and thirty five centavos only";
$i++;
endwhile;
}
else if($fraction ==36){
$i = 1;
while ($i <2):
$output .= " and thirty six centavos only";
$i++;
endwhile;
}
else if($fraction ==37){
$i = 1;
while ($i <2):
$output .= " and thirty seven centavos only";
$i++;
endwhile;
}
else if($fraction ==38){
$i = 1;
while ($i <2):
$output .= " and thirty eight centavos only";
$i++;
endwhile;
}
else if($fraction ==39){
$i = 1;
while ($i <2):
$output .= " and thirty nine centavos only";
$i++;
endwhile;
}
else if($fraction ==40){
$i = 1;
while ($i <2):
$output .= " and fourty centavos only";
$i++;
endwhile;
}
else if($fraction ==41){
$i = 1;
while ($i <2):
$output .= " and fourty one centavos only";
$i++;
endwhile;
}
else if($fraction ==42){
$i = 1;
while ($i <2):
$output .= " and fourty two centavos only";
$i++;
endwhile;
}
else if($fraction ==43){
$i = 1;
while ($i <2):
$output .= " and fourty three centavos only";
$i++;
endwhile;
}
else if($fraction ==44){
$i = 1;
while ($i <2):
$output .= " and fourty four centavos only";
$i++;
endwhile;
}
else if($fraction ==45){
$i = 1;
while ($i <2):
$output .= " and fourty five centavos only";
$i++;
endwhile;
}
else if($fraction ==46){
$i = 1;
while ($i <2):
$output .= " and fourty six centavos only";
$i++;
endwhile;
}
else if($fraction ==47){
$i = 1;
while ($i <2):
$output .= " and fourty seven centavos only";
$i++;
endwhile;
}
else if($fraction ==48){
$i = 1;
while ($i <2):
$output .= " and fourty eight centavos only";
$i++;
endwhile;
}
else if($fraction ==49){
$i = 1;
while ($i <2):
$output .= " and fourty nine centavos only";
$i++;
endwhile;
}
else if($fraction ==50){
$i = 1;
while ($i <2):
$output .= " and fifty centavos only";
$i++;
endwhile;
}
else if($fraction ==51){
$i = 1;
while ($i <2):
$output .= " and fifty one centavos only";
$i++;
endwhile;
}
else if($fraction ==52){
$i = 1;
while ($i <2):
$output .= " and fifty two centavos only";
$i++;
endwhile;
}
else if($fraction ==53){
$i = 1;
while ($i <2):
$output .= " and fifty three centavos only";
$i++;
endwhile;
}
else if($fraction ==54){
$i = 1;
while ($i <2):
$output .= " and fifty four centavos only";
$i++;
endwhile;
}
else if($fraction ==55){
$i = 1;
while ($i <2):
$output .= " and fifty five centavos only";
$i++;
endwhile;
}
else if($fraction ==56){
$i = 1;
while ($i <2):
$output .= " and fifty six centavos only";
$i++;
endwhile;
}
else if($fraction ==57){
$i = 1;
while ($i <2):
$output .= " and fifty seven centavos only";
$i++;
endwhile;
}
else if($fraction ==58){
$i = 1;
while ($i <2):
$output .= " and fifty eight centavos only";
$i++;
endwhile;
}
else if($fraction ==59){
$i = 1;
while ($i <2):
$output .= " and fifty nine centavos only";
$i++;
endwhile;
}
else if($fraction ==60){
$i = 1;
while ($i <2):
$output .= " and sixty centavos only";
$i++;
endwhile;
}
else if($fraction ==61){
$i = 1;
while ($i <2):
$output .= " and sixty one centavos only";
$i++;
endwhile;
}
else if($fraction ==62){
$i = 1;
while ($i <2):
$output .= " and sixty two centavos only";
$i++;
endwhile;
}
else if($fraction ==63){
$i = 1;
while ($i <2):
$output .= " and sixty three centavos only";
$i++;
endwhile;
}
else if($fraction ==64){
$i = 1;
while ($i <2):
$output .= " and sixty four centavos only";
$i++;
endwhile;
}
else if($fraction ==65){
$i = 1;
while ($i <2):
$output .= " and sixty five centavos only";
$i++;
endwhile;
}
else if($fraction ==66){
$i = 1;
while ($i <2):
$output .= " and sixty six centavos only";
$i++;
endwhile;
}
else if($fraction ==67){
$i = 1;
while ($i <2):
$output .= " and sixty seven centavos only";
$i++;
endwhile;
}
else if($fraction ==68){
$i = 1;
while ($i <2):
$output .= " and sixty eight centavos only";
$i++;
endwhile;
}
else if($fraction ==69){
$i = 1;
while ($i <2):
$output .= " and sixty nine centavos only";
$i++;
endwhile;
}
else if($fraction ==70){
$i = 1;
while ($i <2):
$output .= " and seventy centavos only";
$i++;
endwhile;
}
else if($fraction ==71){
$i = 1;
while ($i <2):
$output .= " and seventy one centavos only";
$i++;
endwhile;
}
else if($fraction ==72){
$i = 1;
while ($i <2):
$output .= " and seventy two centavos only";
$i++;
endwhile;
}
else if($fraction ==73){
$i = 1;
while ($i <2):
$output .= " and seventy three centavos only";
$i++;
endwhile;
}
else if($fraction ==74){
$i = 1;
while ($i <2):
$output .= " and seventy four centavos only";
$i++;
endwhile;
}
else if($fraction ==75){
$i = 1;
while ($i <2):
$output .= " and seventy five centavos only";
$i++;
endwhile;
}
else if($fraction ==76){
$i = 1;
while ($i <2):
$output .= " and seventy six centavos only";
$i++;
endwhile;
}
else if($fraction ==77){
$i = 1;
while ($i <2):
$output .= " and seventy seven centavos only";
$i++;
endwhile;
}
else if($fraction ==78){
$i = 1;
while ($i <2):
$output .= " and seventy eight centavos only";
$i++;
endwhile;
}
else if($fraction ==79){
$i = 1;
while ($i <2):
$output .= " and seventy nine centavos only";
$i++;
endwhile;
}
else if($fraction ==80){
$i = 1;
while ($i <2):
$output .= " and eighty centavos only";
$i++;
endwhile;
}
else if($fraction ==81){
$i = 1;
while ($i <2):
$output .= " and eighty one centavos only";
$i++;
endwhile;
}
else if($fraction ==82){
$i = 1;
while ($i <2):
$output .= " and eighty two centavos only";
$i++;
endwhile;
}
else if($fraction ==83){
$i = 1;
while ($i <2):
$output .= " and eighty three centavos only";
$i++;
endwhile;
}
else if($fraction ==84){
$i = 1;
while ($i <2):
$output .= " and eighty four centavos only";
$i++;
endwhile;
}
else if($fraction ==85){
$i = 1;
while ($i <2):
$output .= " and eighty five centavos only";
$i++;
endwhile;
}
else if($fraction ==86){
$i = 1;
while ($i <2):
$output .= " and eighty six centavos only";
$i++;
endwhile;
}
else if($fraction ==87){
$i = 1;
while ($i <2):
$output .= " and eighty seven centavos only";
$i++;
endwhile;
}
else if($fraction ==88){
$i = 1;
while ($i <2):
$output .= " and eighty eight centavos only";
$i++;
endwhile;
}
else if($fraction ==89){
$i = 1;
while ($i <2):
$output .= " and eighty nine centavos only";
$i++;
endwhile;
}
else if($fraction ==90){
$i = 1;
while ($i <2):
$output .= " and ninety centavos only";
$i++;
endwhile;
}
else if($fraction ==91){
$i = 1;
while ($i <2):
$output .= " and ninety one centavos only";
$i++;
endwhile;
}
else if($fraction ==92){
$i = 1;
while ($i <2):
$output .= " and ninety two centavos only";
$i++;
endwhile;
}
else if($fraction ==93){
$i = 1;
while ($i <2):
$output .= " and ninety three centavos only";
$i++;
endwhile;
}
else if($fraction ==94){
$i = 1;
while ($i <2):
$output .= " and ninety four centavos only";
$i++;
endwhile;
}
else if($fraction ==95){
$i = 1;
while ($i <2):
$output .= " and ninety five centavos only";
$i++;
endwhile;
}
else if($fraction ==96){
$i = 1;
while ($i <2):
$output .= " and ninety six centavos only";
$i++;
endwhile;
}
else if($fraction ==97){
$i = 1;
while ($i <2):
$output .= " and ninety seven centavos only";
$i++;
endwhile;
}
else if($fraction ==98){
$i = 1;
while ($i <2):
$output .= " and ninety eight centavos only";
$i++;
endwhile;
}
else if($fraction ==99){
$i = 1;
while ($i <2):
$output .= " and ninety nine centavos only";
$i++;
endwhile;
}
}
}
else{
$output .= " PESOS ONLY";
}
return $output;
}
function convertGroup($index)
{
switch ($index)
{
case 11:
return " decillion";
case 10:
return " nonillion";
case 9:
return " octillion";
case 8:
return " septillion";
case 7:
return " sextillion";
case 6:
return " quintrillion";
case 5:
return " quadrillion";
case 4:
return " trillion";
case 3:
return " billion";
case 2:
return " million";
case 1:
return " thousand";
case 0:
return "";
}
}
function convertThreeDigit($digit1, $digit2, $digit3)
{
$buffer = " ";
if ($digit1 == "0" && $digit2 == "0" && $digit3 == "0")
{
return "";
}
if ($digit1 != "0")
{
$buffer .= convertDigit($digit1) . " hundred";
if ($digit2 != "0" || $digit3 != "0")
{
$buffer .= " ";
}
}
if ($digit2 != "0")
{
$buffer .= convertTwoDigit($digit2, $digit3);
}
else if ($digit3 != "0")
{
$buffer .= convertDigit($digit3);
}
return $buffer;
}
function convertTwoDigit($digit1, $digit2)
{
if ($digit2 == "0")
{
switch ($digit1)
{
case "1":
return "ten";
case "2":
return "twenty";
case "3":
return "thirty";
case "4":
return "forty";
case "5":
return "fifty";
case "6":
return "sixty";
case "7":
return "seventy";
case "8":
return "eighty";
case "9":
return "ninety";
}
} else if ($digit1 == "1")
{
switch ($digit2)
{
case "1":
return "eleven";
case "2":
return "twelve";
case "3":
return "thirteen";
case "4":
return "fourteen";
case "5":
return "fifteen";
case "6":
return "sixteen";
case "7":
return "seventeen";
case "8":
return "eighteen";
case "9":
return "nineteen";
}
} else
{
$temp = convertDigit($digit2);
switch ($digit1)
{
case "2":
return "twenty $temp";
case "3":
return "thirty $temp";
case "4":
return "forty $temp";
case "5":
return "fifty $temp";
case "6":
return "sixty $temp";
case "7":
return "seventy $temp";
case "8":
return "eighty $temp";
case "9":
return "ninety $temp";
}
}
}
function convertDigit($digit)
{
switch ($digit)
{
case "0":
return "zero";
case "1":
return "one";
case "2":
return "two";
case "3":
return "three";
case "4":
return "four";
case "5":
return "five";
case "6":
return "six";
case "7":
return "seven";
case "8":
return "eight";
case "9":
return "nine";
}
}
strtoupper(convertNumber(2143.45)
?>
回答10:
// three hundred and thirteen rupees and seventy-six paise
echo getIndianCurrency(313.76);
function getIndianCurrency(float $number)
{
$decimal = round($number - ($no = floor($number)), 2) * 100;
$hundred = null;
$digits_length = strlen($no);
$i = 0;
$str = array();
$words = array(0 => '', 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 => 'forty', 50 => 'fifty', 60 => 'sixty',
70 => 'seventy', 80 => 'eighty', 90 => 'ninety');
$digits = array('', 'hundred','thousand','lakh', 'crore');
while( $i < $digits_length ) {
$divider = ($i == 2) ? 10 : 100;
$number = floor($no % $divider);
$no = floor($no / $divider);
$i += $divider == 10 ? 1 : 2;
if ($number) {
$plural = (($counter = count($str)) && $number > 9) ? 's' : null;
$hundred = ($counter == 1 && $str[0]) ? ' and ' : null;
$str [] = ($number < 21) ? $words[$number].' '. $digits[$counter]. $plural.' '.$hundred:$words[floor($number / 10) * 10].' '.$words[$number % 10]. ' '.$digits[$counter].$plural.' '.$hundred;
} else $str[] = null;
}
$rupees = implode('', array_reverse($str));
$paise = '';
if ($decimal) {
$paise = 'and ';
$decimal_length = strlen($decimal);
if ($decimal_length == 2) {
if ($decimal >= 20) {
$dc = $decimal % 10;
$td = $decimal - $dc;
$ps = ($dc == 0) ? '' : '-' . $words[$dc];
$paise .= $words[$td] . $ps;
} else {
$paise .= $words[$decimal];
}
} else {
$paise .= $words[$decimal % 10];
}
$paise .= ' paise';
}
return ($rupees ? $rupees . 'rupees ' : '') . $paise ;
}
Uses:
echo getIndianCurrency(313.76);
Output:
three hundred and thirteen rupees and seventy-six paise
回答11:
I don't know about cents but I have created code for Indian Rupees.
<?php
echo getIndianCurrency(2851.05);
function getIndianCurrency(float $number)
{
$decimal = round($number - ($no = floor($number)), 2) * 100;
$decimal_part = $decimal;
$hundred = null;
$hundreds = null;
$digits_length = strlen($no);
$decimal_length = strlen($decimal);
$i = 0;
$str = array();
$str2 = array();
$words = array(0 => '', 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 => 'forty', 50 => 'fifty', 60 => 'sixty',
70 => 'seventy', 80 => 'eighty', 90 => 'ninety');
$digits = array('', 'hundred','thousand','lakh', 'crore');
while( $i < $digits_length ) {
$divider = ($i == 2) ? 10 : 100;
$number = floor($no % $divider);
$no = floor($no / $divider);
$i += $divider == 10 ? 1 : 2;
if ($number) {
$plural = (($counter = count($str)) && $number > 9) ? 's' : null;
$hundred = ($counter == 1 && $str[0]) ? ' and ' : null;
$str [] = ($number < 21) ? $words[$number].' '. $digits[$counter]. $plural.' '.$hundred:$words[floor($number / 10) * 10].' '.$words[$number % 10]. ' '.$digits[$counter].$plural.' '.$hundred;
} else $str[] = null;
}
$d = 0;
while( $d < $decimal_length ) {
$divider = ($d == 2) ? 10 : 100;
$decimal_number = floor($decimal % $divider);
$decimal = floor($decimal / $divider);
$d += $divider == 10 ? 1 : 2;
if ($decimal_number) {
$plurals = (($counter = count($str2)) && $decimal_number > 9) ? 's' : null;
$hundreds = ($counter == 1 && $str2[0]) ? ' and ' : null;
@$str2 [] = ($decimal_number < 21) ? $words[$decimal_number].' '. $digits[$decimal_number]. $plural.' '.$hundred:$words[floor($decimal_number / 10) * 10].' '.$words[$decimal_number % 10]. ' '.$digits[$counter].$plural.' '.$hundred;
} else $str2[] = null;
}
$Rupees = implode('', array_reverse($str));
$paise = implode('', array_reverse($str2));
$paise = ($decimal_part > 0) ? $paise . ' Paise' : '';
return ($Rupees ? $Rupees . 'Rupees ' : '') . $paise;
}
?>
Output:
two thousand eight hundred and fifty one Rupees five Paise
I will write a post about its code description on guptatreepoint.com
回答12:
Money format (India - Rupee) (Working upto 13 digits)
Here i convert number into word format(Currency)
Ex : if you enter 1011, then you will get answer: One Thousand Eleven Rupee
Using string and array function and control structure(if)
// Ex: num = 1250.75
<?php
if (isset($_POST["num"])) {
// Getting number before(".")
$num = $_POST["num"]; // $num = 1250.75
$num_length = strcspn($num, "."); // length of $num
$new_num = substr($num, 0, $num_length); // $new_num = 1250
$new_num = (double) $new_num; // this will remove zero like 0001 = 1
$length = strlen($new_num); // length of $new_num
//Getting number after(".")
$num2 = strchr($num, "."); // $num2 = .75
$num2_length = strlen($num2); // length of $num2
$new_num2 = substr($num2, 1, 3); // This'll give you only '75' from '.75'
$new_num2 = (double) $new_num2; // remove zero like '05' equals to '5'
$precision_len = strlen($new_num2); // length of $new_num2
//Declare global variable
global $result; // to store result of 1250
global $result2; // to store result of 75
// Check length of input and call appropriate function
if ($length == 1) {
if ($new_num == 0 && $new_num2 == NULL) {
$result = "Zero Rupee";
} else {
$result = singleDigitWord($new_num) . " Rupee";
}
//echo $res;
} elseif ($length == 2) {
$result = twoDigitWord($new_num) . " Rupee";
//echo $res;
} elseif ($length == 3) {
$result = threeDigitWord($new_num) . " Rupee";
//echo $res;
} elseif ($length == 4 || $length == 5) {
$result = fourOrFiveDigitWord($length, $new_num) . " Rupee";
} elseif ($length == 6 || $length == 7) {
$result = sixOrSevenDigitWord($length, $new_num) . " Rupee";
} elseif ($length == 8 || $length == 9) {
$result = eightOrNineDigitWord($length, $new_num) . " Rupee";
} elseif ($length == 10 || $length == 11) {
$result = tenOrElevenDigitWord($length, $new_num) . " Rupee";
} elseif ($length == 12 || $length == 13) {
$result = twelveOrThirteenDigitWord($length, $new_num) . " Rupee";
}
if ($new_num2 > 0) {
if ($precision_len == 1) {
$result2 = singleDigitWord($new_num2) . " Paisa";
} elseif ($precision_len == 2) {
$result2 = twoDigitWord($new_num2) . " Paisa";
}
}
}
// Array containing value 1 to 9
function singleDigitWord($a)
{
$array = [
"1" => "One",
"2" => "Two",
"3" => "Three",
"4" => "Four",
"5" => "Five",
"6" => "Six",
"7" => "Seven",
"8" => "Eight",
"9" => "Nine",
];
if (array_key_exists((int) $a, $array)) {
return $array[$a];
}
}
// Array containing value 10 to 19
function ten2nineteen($a)
{
$array = [
"10" => "Ten",
"11" => "Eleven",
"12" => "Twelve",
"13" => "Thirteen",
"14" => "Fourteen",
"15" => "Fifteen",
"16" => "Sixteen",
"17" => "Seventeen",
"18" => "Eighteen",
"19" => "Nineteen",
];
if (array_key_exists((int) $a, $array)) {
return $array[$a];
}
}
// if length is 2,then 10 to 99 digits conversion
function twoDigitWord($a)
{
if ($a >= 10 && $a <= 19) {
$output = ten2nineteen($a);
return $output;
} elseif ($a >= 20 && $a <= 29) {
if ($a == 20) {
return "Twenty";
} else {
$a = $a - 20;
$y = singleDigitWord($a);
return "Twenty " . $y;
}
} elseif ($a >= 30 && $a <= 39) {
if ($a == 30) {
return "Thirty";
} else {
$a = $a - 30;
$y = singleDigitWord($a);
return "Thirty " . $y;
}
} elseif ($a >= 40 && $a <= 49) {
if ($a == 40) {
return "Forty";
} else {
$a = $a - 40;
$y = singleDigitWord($a);
return "Forty " . $y;
}
} elseif ($a >= 50 && $a <= 59) {
if ($a == 50) {
return "Fifty";
} else {
$a = $a - 50;
$y = singleDigitWord($a);
return "Fifty " . $y;
}
} elseif ($a >= 60 && $a <= 69) {
if ($a == 60) {
return "Sixty";
} else {
$a = $a - 60;
$y = singleDigitWord($a);
return "Sixty " . $y;
}
} elseif ($a >= 70 && $a <= 79) {
if ($a == 70) {
return "Seventy";
} else {
$a = $a - 70;
$y = singleDigitWord($a);
return "Seventy " . $y;
}
} elseif ($a >= 80 && $a <= 89) {
if ($a == 80) {
return "Eighty";
} else {
$a = $a - 80;
$y = singleDigitWord($a);
return "Eighty " . $y;
}
} elseif ($a >= 90 && $a <= 99) {
if ($a == 90) {
return "Ninty";
} else {
$a = $a - 90;
$y = singleDigitWord($a);
return "Ninty " . $y;
}
}
}
// if length is 3,then 100 to 999 digits conversion
function threeDigitWord($a)
{
$output = str_split($a);
$first = singleDigitWord($output[0]);
$lastdigits = substr($a, -2);
$lastdigits = (double) $lastdigits;
$second = lastDigitWord($lastdigits);
return $first . " Hundred " . $second;
}
// if length is 4 or 5,then 1000 to 99999 digits conversion
function fourOrFiveDigitWord($length, $a)
{
if ($length == 4) {
$output = str_split($a);
$first = singleDigitWord($output[0]);
} elseif ($length == 5) {
$output = str_split($a, 2);
$first = twoDigitWord($output[0]);
}
$lastdigits = substr($a, -3);
$lastdigits = (double) $lastdigits;
$second = lastDigitWord($lastdigits);
return $first . " Thousand " . $second;
}
// if length is 6 or 7,then 100000 to 9999999 digits conversion
function sixOrSevenDigitWord($length, $a)
{
if ($length == 6) {
$output = str_split($a);
$first = singleDigitWord($output[0]);
} elseif ($length == 7) {
$output = str_split($a, 2);
$first = twoDigitWord($output[0]);
}
$lastdigits = substr($a, -5);
$lastdigits = (double) $lastdigits;
$second = lastDigitWord($lastdigits);
return $first . " Lakh " . $second;
}
// if length is 8 or 9,then 10000000 to 999999999 digits conversion
function eightOrNineDigitWord($length, $a)
{
if ($length == 8) {
$output = str_split($a);
$first = singleDigitWord($output[0]);
} elseif ($length == 9) {
$output = str_split($a, 2);
$first = twoDigitWord($output[0]);
}
$lastdigits = substr($a, -7);
$lastdigits = (double) $lastdigits;
$second = lastDigitWord($lastdigits);
return $first . " Crore " . $second;
}
// if length is 10 or 11,then 1000000000 to 99999999999 digits conversion
function tenOrElevenDigitWord($length, $a)
{
if ($length == 10) {
$output = str_split($a);
$first = singleDigitWord($output[0]);
} elseif ($length == 11) {
$output = str_split($a, 2);
$first = twoDigitWord($output[0]);
}
$lastdigits = substr($a, -9);
$lastdigits = (double) $lastdigits;
$second = lastDigitWord($lastdigits);
return $first . " Billion " . $second;
}
// if length is 12 or 13,then 100000000000 to 99999999999999 digits conversion
function twelveOrThirteenDigitWord($length, $a)
{
if ($length == 12) {
$output = str_split($a);
$first = singleDigitWord($output[0]);
} elseif ($length == 13) {
$output = str_split($a, 2);
$first = twoDigitWord($output[0]);
}
$lastdigits = substr($a, -11);
$lastdigits = (double) $lastdigits;
$second = lastDigitWord($lastdigits);
return $first . " Trillion " . $second;
}
// this function gets value of $lastdigits which is declared in function above
// like twelveOrThirteenDigitWord or many other
// Ex: if your num is 1111 then your last digit will be 111 and you'll get
// answer by calling this function. lastDigitWords function call one of above
// function but i declare it here beacause we do not need to write it in every
// function above to get conversion of $lastdigits
function lastDigitWord($a)
{
if ($a <= 9) {
return singleDigitWord($a);
} elseif ($a >= 10 && $a <= 99) {
return twoDigitWord($a);
} elseif ($a >= 100 && $a <= 999) {
return threeDigitWord($a);
} elseif ($a >= 1000 && $a <= 99999) {
$new_length = strlen($a);
return fourORFiveDigitWord($new_length, $a);
} elseif ($a >= 100000 && $a <= 9999999) {
$new_length = strlen($a);
return sixORSevenDigitWord($new_length, $a);
} elseif ($a >= 10000000 && $a <= 999999999) {
$new_length = strlen($a);
return eightOrNineDigitWord($new_length, $a);
} elseif ($a >= 1000000000 && $a <= 99999999999) {
$new_length = strlen($a);
return tenOrElevenDigitWord($new_length, $a);
}
}
?>
<html>
<body>
<form name="myForm" method="POST" action="">
<table cellspacing="10" cellpadding="10">
<tr>
<td><label for="num">Enter Number: </label></td>
<td><input type="text" name="num" id="num" value="<?php
if (isset($_POST['num'])) {
echo $_POST['num'];
}
?>"></td>
<td><input type="submit" name="submit" id="submit" value="submit"></td>
</tr>
</table>
</form>
<p><b>In words : </b>
<?php
global $result;
global $result2;
echo $result . " " . $result2;
?>
</p>
</body>
</html>
来源:https://stackoverflow.com/questions/19308102/how-to-convert-decimal-number-to-words-money-format-using-php