Convert Number to Words in Indian currency format with paise value [duplicate]
Asked Answered
S

1

17

Using PHP how to convert number to Indian currency word format with paise (decimal value)

Input
190908100.25

Output we need

nineteen crores nine lakh eight thousand one hundred Rupees .two five Paise

I expect this conversion method in core php .

Selfdriven answered 22/9, 2014 at 6:0 Comment(3)
Write your own function?Verenaverene
calculate each char define it's value?Syncope
this link might be useful...#19308602Nonfeasance
S
97

Convert Currency Number to Word Format Using PHP

 <?php
  /**
   * Created by PhpStorm.
   * User: sakthikarthi
   * Date: 9/22/14
   * Time: 11:26 AM
   * Converting Currency Numbers to words currency format
   */
$number = 190908100.25;
   $no = floor($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 . "Rupees  " . $points . " Paise";
 ?> 
  • Output

    nineteen crores nine lakh eight thousand one hundred Rupees . two five Paise


    Now i have added Simplified Method as follows:
    
    

    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 = ($decimal > 0) ? "." . ($words[$decimal / 10] . " " . $words[$decimal % 10]) . ' Paise' : ''; return ($Rupees ? $Rupees . 'Rupees ' : '') . $paise; }

method calling :

echo getIndianCurrency(79855995.19);

output seven crore ninety eight lakhs fifty five thousands nine hundred and ninety five Rupees .one nine Paise

Selfdriven answered 22/9, 2014 at 6:15 Comment(9)
Perfectly works for me.Goldman
34234.50 this number returns error Notice: Undefined offset: -5Hesperian
share your code logicSelfdriven
This support upto 99 crores. 100 crore onwards, it returns notice and wrong result.Doorplate
Shouldn't it show "twenty-five paisa"? for 190908100.25Bibliofilm
yes two five paisa is the currency standardSelfdriven
there is a problem in both cases it's seven paise. 313.70 = three hundred and thirteen rupees and seven paise, 313.07 = three hundred and thirteen rupees and seven paiseArchitectonics
That's great! Thanks for your effort. It saved my time! :)Persona
Just change 2nd last line to $paise = ($decimal > 0) ? "" . ($words[(int)($decimal/10)*10] . " " . $words[$decimal % 10]) . ' Paise' : '';Manisa

© 2022 - 2024 — McMap. All rights reserved.