替代money_format()在Windows平台上的PHP函数

我在PHP中使用money_format()函数,它给出了以下错误:

 Fatal error: Call to undefined function money_format() 

search这个错误显示函数money_format()仅在系统具有strfmonfunction时才被定义。 例如,Windows不会,所以money_format()在Windows中是未定义的。

是否有可用于Windows的等效PHP函数?

Solutions Collecting From Web of "替代money_format()在Windows平台上的PHP函数"

如果你有国际扩展 ,你可以使用

  • NumberFormatter :: formatCurrency – 根据格式化程序规则设置货币值。

手册中的示例

 $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"; 

产量

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

另请参阅我的答案如何解析格式化的货币字符串回到浮动:

  • PHP:不格式化的钱

把事情简单化!

 sprintf('%01.2f', $val); 
 <?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); ?> 

试试这个出上面的代码是“$ 9,856,478,521,456.26”

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

输出:$ 45.00

我建议使用NumberFormatter::CURRENCY和locale来查看NumberFormatter

另外Laravel number_format($price, 2)函数是非常有用的。

请注意,似乎也包含类似格式的有用功能:

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

不要忘记检查功能是否存在!

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

我总是用这个手动添加美元符号:

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

@Ajeet toMoney功能看起来不错,但它不适合'0899'

改变lengthstrlen()

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

所以改成如下

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

现在这将适用于任何数据。

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

我不明白为什么@Ajeet是如此复杂,为什么不这样做,它现在也可以用4位数字来回答@bharanikumar“,但它不适用于'0899'”

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

@Y Talansky你的函数可能是下一个代码:

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

**

中电钱(moneda peso chileno,conformato 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 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; } 

像这样使用它:

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

而不是money_format()你也可以试试这个。 希望这将有助于任何人面对这个call to undefined function money_format()错误的call to undefined function money_format()

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

输出:

 $120.00