I am using the money_format()
function in PHP, which gives the following error:
Fatal error: Call to undefined function money_format()
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;
}
**
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
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
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')) { //... }
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 your function could be the next code:
function number_to_money($value, $symbol = '$', $decimals = 2)
{
return $symbol . ($value < 0 ? '-' : '') . number_format(abs($value), $decimals);
}