45

I am trying to use the money_format() function in PHP, but it gives the following error:

Fatal error: Call to undefined function money_format()

Searches about this error reveal that the function money_format() is only defined if the system has strfmon capabilities (for example, Windows does not) and also that the function has been removed from PHP 8.0.

Is there an equivalent PHP function available?

miken32
  • 42,008
  • 16
  • 111
  • 154
Pramod Kumar Sharma
  • 7,851
  • 5
  • 28
  • 53

15 Answers15

41

If you have the Intl extension, you can use

Example from Manual

$fmt = new NumberFormatter( 'de_DE', NumberFormatter::CURRENCY );
echo $fmt->formatCurrency(1234567.891234567890000, "EUR")."\n";
echo $fmt->formatCurrency(1234567.891234567890000, "RUR")."\n";
$fmt = new NumberFormatter( 'ru_RU', NumberFormatter::CURRENCY );
echo $fmt->formatCurrency(1234567.891234567890000, "EUR")."\n";
echo $fmt->formatCurrency(1234567.891234567890000, "RUR")."\n";

Output

1.234.567,89 €
1.234.567,89 RUR
1 234 567,89€
1 234 567,89р.

Also see my answer on how to parse that formatted money string back into a float:

Community
  • 1
  • 1
Gordon
  • 312,688
  • 75
  • 539
  • 559
40

Keep it simple!

sprintf('%01.2f', $val);
tfont
  • 10,891
  • 7
  • 56
  • 52
  • 1
    This is a good suggestion, but what if you want the `-` sign in front of the `$` for negative dollar amounts? What if you want `()` instead of `-`? – Charity Leschinski Jan 04 '14 at 16:31
  • 1
    @CharityAbbott, `$val = "-".sprintf('%01.2f;, $val);` or `$val = "(".sprintf('%01.2f;, $val).")";` – jazcam Oct 01 '15 at 18:15
12
<?php
function toMoney($val,$symbol='$',$r=2)
{


    $n = $val; 
    $c = is_float($n) ? 1 : number_format($n,$r);
    $d = '.';
    $t = ',';
    $sign = ($n < 0) ? '-' : '';
    $i = $n=number_format(abs($n),$r); 
    $j = (($j = $i.length) > 3) ? $j % 3 : 0; 

   return  $symbol.$sign .($j ? substr($i,0, $j) + $t : '').preg_replace('/(\d{3})(?=\d)/',"$1" + $t,substr($i,$j)) ;

}

echo toMoney(9856478521456.256);
?>

try this the out put of above code is "$9,856,478,521,456.26"

Ajeet
  • 121
  • 1
  • 2
11

I would suggest taking a look into NumberFormatter using NumberFormatter::CURRENCY and locale.

Also Laravel number_format($price, 2) function is super useful.

Note, also useful functional that seems to contain similar format:

function money_format($floatcurr, $curr = 'EUR')
{
    $currencies['ARS'] = array(2, ',', '.');          //  Argentine Peso
    $currencies['AMD'] = array(2, '.', ',');          //  Armenian Dram
    $currencies['AWG'] = array(2, '.', ',');          //  Aruban Guilder
    $currencies['AUD'] = array(2, '.', ' ');          //  Australian Dollar
    $currencies['BSD'] = array(2, '.', ',');          //  Bahamian Dollar
    $currencies['BHD'] = array(3, '.', ',');          //  Bahraini Dinar
    $currencies['BDT'] = array(2, '.', ',');          //  Bangladesh, Taka
    $currencies['BZD'] = array(2, '.', ',');          //  Belize Dollar
    $currencies['BMD'] = array(2, '.', ',');          //  Bermudian Dollar
    $currencies['BOB'] = array(2, '.', ',');          //  Bolivia, Boliviano
    $currencies['BAM'] = array(2, '.', ',');          //  Bosnia and Herzegovina, Convertible Marks
    $currencies['BWP'] = array(2, '.', ',');          //  Botswana, Pula
    $currencies['BRL'] = array(2, ',', '.');          //  Brazilian Real
    $currencies['BND'] = array(2, '.', ',');          //  Brunei Dollar
    $currencies['CAD'] = array(2, '.', ',');          //  Canadian Dollar
    $currencies['KYD'] = array(2, '.', ',');          //  Cayman Islands Dollar
    $currencies['CLP'] = array(0,  '', '.');          //  Chilean Peso
    $currencies['CNY'] = array(2, '.', ',');          //  China Yuan Renminbi
    $currencies['COP'] = array(2, ',', '.');          //  Colombian Peso
    $currencies['CRC'] = array(2, ',', '.');          //  Costa Rican Colon
    $currencies['HRK'] = array(2, ',', '.');          //  Croatian Kuna
    $currencies['CUC'] = array(2, '.', ',');          //  Cuban Convertible Peso
    $currencies['CUP'] = array(2, '.', ',');          //  Cuban Peso
    $currencies['CYP'] = array(2, '.', ',');          //  Cyprus Pound
    $currencies['CZK'] = array(2, '.', ',');          //  Czech Koruna
    $currencies['DKK'] = array(2, ',', '.');          //  Danish Krone
    $currencies['DOP'] = array(2, '.', ',');          //  Dominican Peso
    $currencies['XCD'] = array(2, '.', ',');          //  East Caribbean Dollar
    $currencies['EGP'] = array(2, '.', ',');          //  Egyptian Pound
    $currencies['SVC'] = array(2, '.', ',');          //  El Salvador Colon
    $currencies['ATS'] = array(2, ',', '.');          //  Euro
    $currencies['BEF'] = array(2, ',', '.');          //  Euro
    $currencies['DEM'] = array(2, ',', '.');          //  Euro
    $currencies['EEK'] = array(2, ',', '.');          //  Euro
    $currencies['ESP'] = array(2, ',', '.');          //  Euro
    $currencies['EUR'] = array(2, ',', '.');          //  Euro
    $currencies['FIM'] = array(2, ',', '.');          //  Euro
    $currencies['FRF'] = array(2, ',', '.');          //  Euro
    $currencies['GRD'] = array(2, ',', '.');          //  Euro
    $currencies['IEP'] = array(2, ',', '.');          //  Euro
    $currencies['ITL'] = array(2, ',', '.');          //  Euro
    $currencies['LUF'] = array(2, ',', '.');          //  Euro
    $currencies['NLG'] = array(2, ',', '.');          //  Euro
    $currencies['PTE'] = array(2, ',', '.');          //  Euro
    $currencies['GHC'] = array(2, '.', ',');          //  Ghana, Cedi
    $currencies['GIP'] = array(2, '.', ',');          //  Gibraltar Pound
    $currencies['GTQ'] = array(2, '.', ',');          //  Guatemala, Quetzal
    $currencies['HNL'] = array(2, '.', ',');          //  Honduras, Lempira
    $currencies['HKD'] = array(2, '.', ',');          //  Hong Kong Dollar
    $currencies['HUF'] = array(0,  '', '.');          //  Hungary, Forint
    $currencies['ISK'] = array(0,  '', '.');          //  Iceland Krona
    $currencies['INR'] = array(2, '.', ',');          //  Indian Rupee
    $currencies['IDR'] = array(2, ',', '.');          //  Indonesia, Rupiah
    $currencies['IRR'] = array(2, '.', ',');          //  Iranian Rial
    $currencies['JMD'] = array(2, '.', ',');          //  Jamaican Dollar
    $currencies['JPY'] = array(0,  '', ',');          //  Japan, Yen
    $currencies['JOD'] = array(3, '.', ',');          //  Jordanian Dinar
    $currencies['KES'] = array(2, '.', ',');          //  Kenyan Shilling
    $currencies['KWD'] = array(3, '.', ',');          //  Kuwaiti Dinar
    $currencies['LVL'] = array(2, '.', ',');          //  Latvian Lats
    $currencies['LBP'] = array(0,  '', ' ');          //  Lebanese Pound
    $currencies['LTL'] = array(2, ',', ' ');          //  Lithuanian Litas
    $currencies['MKD'] = array(2, '.', ',');          //  Macedonia, Denar
    $currencies['MYR'] = array(2, '.', ',');          //  Malaysian Ringgit
    $currencies['MTL'] = array(2, '.', ',');          //  Maltese Lira
    $currencies['MUR'] = array(0,  '', ',');          //  Mauritius Rupee
    $currencies['MXN'] = array(2, '.', ',');          //  Mexican Peso
    $currencies['MZM'] = array(2, ',', '.');          //  Mozambique Metical
    $currencies['NPR'] = array(2, '.', ',');          //  Nepalese Rupee
    $currencies['ANG'] = array(2, '.', ',');          //  Netherlands Antillian Guilder
    $currencies['ILS'] = array(2, '.', ',');          //  New Israeli Shekel
    $currencies['TRY'] = array(2, '.', ',');          //  New Turkish Lira
    $currencies['NZD'] = array(2, '.', ',');          //  New Zealand Dollar
    $currencies['NOK'] = array(2, ',', '.');          //  Norwegian Krone
    $currencies['PKR'] = array(2, '.', ',');          //  Pakistan Rupee
    $currencies['PEN'] = array(2, '.', ',');          //  Peru, Nuevo Sol
    $currencies['UYU'] = array(2, ',', '.');          //  Peso Uruguayo
    $currencies['PHP'] = array(2, '.', ',');          //  Philippine Peso
    $currencies['PLN'] = array(2, '.', ' ');          //  Poland, Zloty
    $currencies['GBP'] = array(2, '.', ',');          //  Pound Sterling
    $currencies['OMR'] = array(3, '.', ',');          //  Rial Omani
    $currencies['RON'] = array(2, ',', '.');          //  Romania, New Leu
    $currencies['ROL'] = array(2, ',', '.');          //  Romania, Old Leu
    $currencies['RUB'] = array(2, ',', '.');          //  Russian Ruble
    $currencies['SAR'] = array(2, '.', ',');          //  Saudi Riyal
    $currencies['SGD'] = array(2, '.', ',');          //  Singapore Dollar
    $currencies['SKK'] = array(2, ',', ' ');          //  Slovak Koruna
    $currencies['SIT'] = array(2, ',', '.');          //  Slovenia, Tolar
    $currencies['ZAR'] = array(2, '.', ' ');          //  South Africa, Rand
    $currencies['KRW'] = array(0,  '', ',');          //  South Korea, Won
    $currencies['SZL'] = array(2, '.', ', ');         //  Swaziland, Lilangeni
    $currencies['SEK'] = array(2, ',', '.');          //  Swedish Krona
    $currencies['CHF'] = array(2, '.', '\'');         //  Swiss Franc
    $currencies['TZS'] = array(2, '.', ',');          //  Tanzanian Shilling
    $currencies['THB'] = array(2, '.', ',');          //  Thailand, Baht
    $currencies['TOP'] = array(2, '.', ',');          //  Tonga, Paanga
    $currencies['AED'] = array(2, '.', ',');          //  UAE Dirham
    $currencies['UAH'] = array(2, ',', ' ');          //  Ukraine, Hryvnia
    $currencies['USD'] = array(2, '.', ',');          //  US Dollar
    $currencies['VUV'] = array(0,  '', ',');          //  Vanuatu, Vatu
    $currencies['VEF'] = array(2, ',', '.');          //  Venezuela Bolivares Fuertes
    $currencies['VEB'] = array(2, ',', '.');          //  Venezuela, Bolivar
    $currencies['VND'] = array(0,  '', '.');          //  Viet Nam, Dong
    $currencies['ZWD'] = array(2, '.', ' ');          //  Zimbabwe Dollar
    // custom function to generate: ##,##,###.##
    function formatinr($input)
    {
        $dec = "";
        $pos = strpos($input, ".");
        if ($pos === FALSE)
        {
            //no decimals
        }
        else
        {
            //decimals
            $dec   = substr(round(substr($input, $pos), 2), 1);
            $input = substr($input, 0, $pos);
        }
        $num   = substr($input, -3);    // get the last 3 digits
        $input = substr($input, 0, -3); // omit the last 3 digits already stored in $num
        // loop the process - further get digits 2 by 2
        while (strlen($input) > 0)
        {
            $num   = substr($input, -2).",".$num;
            $input = substr($input, 0, -2);
        }
        return $num.$dec;
    }
    if ($curr == "INR")
    {
        return formatinr($floatcurr);
    }
    else
    {
        return number_format($floatcurr, $currencies[$curr][0], $currencies[$curr][1], $currencies[$curr][2]);
    }
}

And don't forget to check if the function exist!

if (!function_exists('money_format')) { //... }
Travis
  • 161
  • 2
  • 9
  • I'd recommend using this; just drop it into a file, wrap it in the `if (!function_exists("money_format")) { ....` line, and include it before anything that might use it. – Jamon Holmgren Mar 11 '22 at 23:59
7

I always just used this to manually add the dollar sign:

// for $k = 53.234234978
$k = "$ " . number_format($k, 2);
// output = $ 53.23
Brian Powell
  • 3,336
  • 4
  • 34
  • 60
3

As of php 8.0 money_format() has been removed. Checkout here

money_format() php function can only be used for php 7.4 and below. Alternatively you can use

numfmt_format_currency ( NumberFormatter $fmt , float $value , string $currency ) Read more from here

where:

fmt

NumberFormatter object.

value

The numeric currency value.

currency

The 3-letter ISO 4217 currency code indicating the currency to use.

Example:

$fmt = numfmt_create( 'de_DE', NumberFormatter::CURRENCY );
echo numfmt_format_currency($fmt, 1234567.891234567890000, "EUR")."\n";

You can also use a very simple and straight forward laravel package: money-formatter

WilliamDk
  • 103
  • 1
  • 6
2

I don't understand why @Ajeet is making it so complicated why not do like this, It also now works for 4 digit numbers to answer @bharanikumar "but it is not working for the '0899'"

function toMoney($val,$symbol='$',$r=2)
{
    $n = $val;
    $sign = ($n < 0) ? '-' : '';
    $i = number_format(abs($n),$r);

    return  $symbol.$sign.$i;
}
Y Talansky
  • 383
  • 3
  • 7
2
 function toMoney($val,$symbol='$',$r=2)
{


    $n = $val; 
    $c = is_float($n) ? 1 : number_format($n,$r);
    $d = '.';
    $t = ',';
    $sign = ($n < 0) ? '-' : '';
    $i = $n=number_format(abs($n),$r); 
    $j = (($j = strlen($i)) > 3) ? $j % 3 : 0; 

   return  $symbol.$sign .($j ? substr($i,0, $j) + $t : '').preg_replace('/(\d{3})(?=\d)/',"$1" + $t,substr($i,$j)) ;

}

echo toMoney(45); ; 

output:$45.00

Brian Tompsett - 汤莱恩
  • 5,753
  • 72
  • 57
  • 129
  • 1
    Great stuff for those without both `money_format` and the `NumberFormatter` class. Your solution prints -70927.43 as $-70,927.43 whereas the format -$70,927.43 is more common at least in this neck of the woods. By swapping `$symbol` and `$sign` in the return statement, I achieved what I was interested in. – enhzflep Mar 23 '16 at 05:24
  • 2
    Further to my above comment, your code fails for numbers less than 10,000. The value 8994.68 is printed as $8994.68. The fix appears to be $j % 2 (rather than % 3) in the following: `$j = (($j = strlen($i)) > 3) ? $j % 2 : 0;` :) Again, thanks.. – enhzflep Mar 27 '16 at 02:02
2

Instead of money_format() you can also try this. Hope this will be helped any guy who faced this call to undefined function money_format() error.

<?php
    $price = number_format($price, 2); 
    echo "$".$price;
?>

Output:

$120.00
Sachith Wickramaarachchi
  • 5,546
  • 6
  • 39
  • 68
2

The solution to this problem is create a PHP file with the money_format() function and use the Apache auto_prepend_file directive in your php.ini file. Usually, if you use XAMPP, your php.ini should be in

C:\XAMPP\php\php.ini

Append this line of code to your php.ini file.

auto_prepend_file = "C:\money_format.php"

use this function in money_format.php

function money_format($formato, $valor) { 


    if (setlocale(LC_MONETARY, 0) == 'C') { 
        return number_format($valor, 2); 
    }

    $locale = localeconv(); 

    $regex = '/^'.             // Inicio da Expressao 
             '%'.              // Caractere % 
             '(?:'.            // Inicio das Flags opcionais 
             '\=([\w\040])'.   // Flag =f 
             '|'. 
             '([\^])'.         // Flag ^ 
             '|'. 
             '(\+|\()'.        // Flag + ou ( 
             '|'. 
             '(!)'.            // Flag ! 
             '|'. 
             '(-)'.            // Flag - 
             ')*'.             // Fim das flags opcionais 
             '(?:([\d]+)?)'.   // W  Largura de campos 
             '(?:#([\d]+))?'.  // #n Precisao esquerda 
             '(?:\.([\d]+))?'. // .p Precisao direita 
             '([in%])'.        // Caractere de conversao 
             '$/';             // Fim da Expressao 

    if (!preg_match($regex, $formato, $matches)) { 
        trigger_error('Formato invalido: '.$formato, E_USER_WARNING); 
        return $valor; 
    } 

    $opcoes = array( 
        'preenchimento'   => ($matches[1] !== '') ? $matches[1] : ' ', 
        'nao_agrupar'     => ($matches[2] == '^'), 
        'usar_sinal'      => ($matches[3] == '+'), 
        'usar_parenteses' => ($matches[3] == '('), 
        'ignorar_simbolo' => ($matches[4] == '!'), 
        'alinhamento_esq' => ($matches[5] == '-'), 
        'largura_campo'   => ($matches[6] !== '') ? (int)$matches[6] : 0, 
        'precisao_esq'    => ($matches[7] !== '') ? (int)$matches[7] : false, 
        'precisao_dir'    => ($matches[8] !== '') ? (int)$matches[8] : $locale['int_frac_digits'], 
        'conversao'       => $matches[9] 
    ); 

    if ($opcoes['usar_sinal'] && $locale['n_sign_posn'] == 0) { 
        $locale['n_sign_posn'] = 1; 
    } elseif ($opcoes['usar_parenteses']) { 
        $locale['n_sign_posn'] = 0; 
    } 
    if ($opcoes['precisao_dir']) { 
        $locale['frac_digits'] = $opcoes['precisao_dir']; 
    } 
    if ($opcoes['nao_agrupar']) { 
        $locale['mon_thousands_sep'] = ''; 
    } 

    $tipo_sinal = $valor >= 0 ? 'p' : 'n'; 
    if ($opcoes['ignorar_simbolo']) { 
        $simbolo = ''; 
    } else { 
        $simbolo = $opcoes['conversao'] == 'n' ? $locale['currency_symbol'] 
                                               : $locale['int_curr_symbol']; 
    } 
    $numero = number_format(abs($valor), $locale['frac_digits'], $locale['mon_decimal_point'], $locale['mon_thousands_sep']); 


    $sinal = $valor >= 0 ? $locale['positive_sign'] : $locale['negative_sign']; 
    $simbolo_antes = $locale[$tipo_sinal.'_cs_precedes']; 

    $espaco1 = $locale[$tipo_sinal.'_sep_by_space'] == 1 ? ' ' : ''; 

    $espaco2 = $locale[$tipo_sinal.'_sep_by_space'] == 2 ? ' ' : ''; 

    $formatado = ''; 
    switch ($locale[$tipo_sinal.'_sign_posn']) { 
    case 0: 
        if ($simbolo_antes) { 
            $formatado = '('.$simbolo.$espaco1.$numero.')'; 
        } else { 
            $formatado = '('.$numero.$espaco1.$simbolo.')'; 
        } 
        break; 
    case 1: 
        if ($simbolo_antes) { 
            $formatado = $sinal.$espaco2.$simbolo.$espaco1.$numero; 
        } else { 
            $formatado = $sinal.$numero.$espaco1.$simbolo; 
        } 
        break; 
    case 2: 
        if ($simbolo_antes) { 
            $formatado = $simbolo.$espaco1.$numero.$sinal; 
        } else { 
            $formatado = $numero.$espaco1.$simbolo.$espaco2.$sinal; 
        } 
        break; 
    case 3: 
        if ($simbolo_antes) { 
            $formatado = $sinal.$espaco2.$simbolo.$espaco1.$numero; 
        } else { 
            $formatado = $numero.$espaco1.$sinal.$espaco2.$simbolo; 
        } 
        break; 
    case 4: 
        if ($simbolo_antes) { 
            $formatado = $simbolo.$espaco2.$sinal.$espaco1.$numero; 
        } else { 
            $formatado = $numero.$espaco1.$simbolo.$espaco2.$sinal; 
        } 
        break; 
    } 

    if ($opcoes['largura_campo'] > 0 && strlen($formatado) < $opcoes['largura_campo']) { 
        $alinhamento = $opcoes['alinhamento_esq'] ? STR_PAD_RIGHT : STR_PAD_LEFT; 
        $formatado = str_pad($formatado, $opcoes['largura_campo'], $opcoes['preenchimento'], $alinhamento); 
    } 

    return $formatado; 
} 
nageen nayak
  • 1,262
  • 2
  • 18
  • 28
0

@Ajeet toMoney function looks good, but it is not working for the '0899'

Change length Into strlen()

$j = (($j = $i.length) > 3) ? $j % 3 : 0;

so change into below like

$j = (($j = strlen($i)) > 3) ? $j % 3 : 0;

Now this will work for any data.

<?php
function toMoney($val,$symbol='$',$r=2)
{


    $n = $val; 
    $c = is_float($n) ? 1 : number_format($n,$r);
    $d = '.';
    $t = ',';
    $sign = ($n < 0) ? '-' : '';
    $i = $n=number_format(abs($n),$r); 
    $j = (($j = strlen($i)) > 3) ? $j % 3 : 0; 

   return  $symbol.$sign .($j ? substr($i,0, $j) + $t : '').preg_replace('/(\d{3})(?=\d)/',"$1" + $t,substr($i,$j)) ;

}

echo toMoney('0899'/100); //Note: single quotes mandatory

?>
Sisir
  • 2,668
  • 6
  • 47
  • 82
Bharanikumar
  • 25,457
  • 50
  • 131
  • 201
0

@Y Talansky your function could be the next code:

function number_to_money($value, $symbol = '$', $decimals = 2)
{
    return $symbol . ($value < 0 ? '-' : '') . number_format(abs($value), $decimals);
}
0

**

CLP money (moneda peso chileno, con formato miles)

**

    function toMoney($val,$symbol='$',$r=0)
{
    $n = $val; 
    $c = is_float($n) ? 1 : number_format($n,$r);
    $d = '.';
    $t = ',';
    $sign = ($n < 0) ? '-' : '';
    $i = $n=number_format(abs($n),$r); 
    $j = (($j = strlen($i)) > 2) ? $j % 2 : 0; 

   return  $symbol.$sign .($j ? substr($i,0, $j) + $t : '').preg_replace('/(\d{3})(?=\d)/',"$1" + $t,substr($i,$j)) ;

}

echo toMoney(45); $45
echo toMoney(4500);  $4,500
echo toMoney(45000);  $45,000
0

I use this function:

function formatPrice($number, array $options = [])
{
    $options = array_replace([
        'alwaysShowDecimals' => true,
        'nbDecimals' => 2,
        'decPoint' => ".",
        'thousandSep' => "",
        'moneySymbol' => "€",
        'moneyFormat' => "vs", // v represents the value, s represents the money symbol
    ], $options);
    extract($options);

    $v = number_format($number, $nbDecimals, $decPoint, $thousandSep);
    if (false === $alwaysShowDecimals && $nbDecimals > 0) {
        $p = explode($decPoint, $v);
        $dec = array_pop($p);
        if (0 === (int)$dec) {
            $v = implode('', $p);
        }
    }
    $ret = str_replace([
        'v',
        's',
    ], [
        $v,
        $moneySymbol,
    ], $moneyFormat);
    return $ret;

}

And use it like this:

$numbers = [
    1500,
    90,
    17.52,
    3650.95,
];

$options = [
    'alwaysShowDecimals' => true,
    'nbDecimals' => 2,
    'decPoint' => ".",
    'thousandSep' => "",
    'moneySymbol' => "€",
    'moneyFormat' => "vs", // v represents the value, s represents the money symbol
];
foreach ($numbers as $number) {
    echo formatPrice($number, $options);
    echo "<br>";
}
/**
 * output:
 * 
 * 1500.00€
 * 90.00€
 * 17.52€
 * 3650.95€
 * 
 */
ling
  • 9,545
  • 4
  • 52
  • 49
0

This PHP function will give you output based on INR formatting, pass the parameter, and you are done.

    function numberToCurrency($number){
        $checkMinusVal = explode('-',$number)[0];
        $checkMinus = $final = '';
        $allStr = explode('.',$number);
        if($checkMinusVal == ''){
            $checkMinus = '-';
            $allStr = explode('.',explode('-',$number)[1]);
        }
        $str = $allStr[0];
        $length = strlen($str);
        $count = $first = 0;
        for($i = $length; $i >= 0; $i--){   
            if($count == 3 && $first == 0){
                $final .= $str[$i];
                if($str[$i + 1] != ''){
                    $final .= ',';
                }
                $count = 0;
                $first = 1;
            }
            elseif($count == 2 && $first == 1){
                if( ($i - 1) < 0){
                    $final .= $str[$i];
                }
                else{
                    $final .= $str[$i].',';
                }
                $count = 0;
            }
            else{
                $final .= $str[$i];
            } 
            $count++;
        }
        $final = strrev($final);
        if(array_key_exists("1",$allStr)){
            $decimalVal = $allStr[1][0];
            if(!empty($allStr[1][1])){
                $decimalVal .= $allStr[1][1];
            }
            else{
                $decimalVal .= 0;
            }
            if($allStr[1][2] >= 5){
                $decimalVal++;
            }
            $final .= '.'.$decimalVal;
        }
        return $checkMinus.'₹'.$final.'/-';
    }

In your page call numberToCurrency($number) function and it will format and give you output in INR formatting only.

Sample Output:-

echo numberToCurrency('123') => ₹123/-

echo numberToCurrency('1234') => ₹1,234/-

echo numberToCurrency('1234567') => ₹12,34,567/-

echo numberToCurrency('1234567.123') => ₹12,34,567.12/-

echo numberToCurrency('1234567.125') => ₹12,34,567.13/-

echo numberToCurrency('-1234567.125') => -₹12,34,567.13/-

Nayana Chandran
  • 1,416
  • 1
  • 16
  • 30