redondeo pesos number_format number money_format money decimals commas php windows money-format

pesos - Alternativa a la función money_format() en PHP en la plataforma de Windows



php money format pesos (13)

¡Mantenlo simple!

sprintf(''%01.2f'', $val);

Estoy usando la función money_format() en PHP, que da el siguiente error:

Fatal error: Call to undefined function money_format()

Las búsquedas sobre este error revelan que la función money_format() solo está definida si el sistema tiene capacidades de strfmon . Por ejemplo, Windows no, por lo que money_format() no está definido en Windows.

¿Hay una función PHP equivalente disponible para Windows?


**

Dinero de CLP (moneda peso chileno, con millas de formato)

**

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


@Y Talansky su función podría ser el próximo código:

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


En lugar de money_format() también puedes probar esto. Espero que esto call to undefined function money_format() a cualquier chico que enfrente esta call to undefined function money_format() error.

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

Salida:

$120.00


La función @Ajeet toMoney se ve bien, pero no está funcionando para el ''0899''

Cambiar length en strlen()

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

así que cambia a abajo como

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

Ahora esto funcionará para cualquier información.

<?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 ?>


La solución a este problema es crear un archivo PHP con la función money_format () y usar la directiva auto_prepend_file de Apache en su archivo php.ini. Por lo general, si usa XAMPP, su php.ini debería estar en

C:/XAMPP/php/php.ini

Agregue esta línea de código a su archivo php.ini.

auto_prepend_file = "C:/money_format.php"

usa esta función en 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; }


No entiendo por qué @Ajeet lo está haciendo tan complicado, ¿por qué no hacer esto? Ahora también funciona con números de 4 dígitos para responder @bharanikumar "pero no funciona para el ''0899''".

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


Si tiene la extensión Intl , puede usar

Ejemplo de 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";

Salida

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

También vea mi respuesta sobre cómo analizar esa cadena de dinero formateada de nuevo en un carro flotante:


Siempre acabo de usar esto para agregar manualmente el signo de dólar:

// for $k = 53.234234978 $k = "$ " . number_format($k, 2); // output = $ 53.23


Sugeriría echarle un vistazo a NumberFormatter usando NumberFormatter::CURRENCY y locale.

Además, la función Laravel number_format($price, 2) es muy útil.

Tenga en cuenta, también útil funcional que parece contener un formato similar:

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]); } }

¡Y no olvide verificar si la función existe!

if (!function_exists(''money_format'')) { //... }


Yo uso esta función:

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; }

Y úsalo así:

$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€ * */


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); ;

salida: $ 45.00


<?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); ?>

intenta esto, el código de salida del código anterior es "$ 9,856,478,521,456.26"