41

PHP で関数を使用しようとしてmoney_format()いますが、次のエラーが発生します。

Fatal error: Call to undefined function money_format()

このエラーについて検索するとmoney_format()、システムに機能がある場合にのみ関数が定義されておりstrfmon(たとえば、Windows には機能がない)、関数が PHP 8.0 から削除されていることがわかります。

利用可能な同等の PHP 関数はありますか?

4

15 に答える 15

36

Intl extensionがある場合は、使用できます

マニュアルの例

$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р.

また、そのフォーマットされたお金の文字列を解析してフロートに戻す方法についての私の回答も参照してください。

于 2011-06-16T11:07:05.820 に答える
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);
?>

これを試してください上記のコードの出力は「$ 9,856,478,521,456.26」です

于 2012-07-24T08:46:35.147 に答える
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); ; 

出力:$45.00

于 2015-08-15T17:29:06.577 に答える
0

@Y Talansky 関数は次のコードになる可能性があります。

function number_to_money($value, $symbol = '$', $decimals = 2)
{
    return $symbol . ($value < 0 ? '-' : '') . number_format(abs($value), $decimals);
}
于 2014-08-24T07:23:31.040 に答える
0

@Ajeet toMoney 関数は良さそうですが、「0899」では機能しません

lengthに変更strlen()

$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

?>
于 2013-02-19T03:46:15.257 に答える