PHP で関数を使用しようとしてmoney_format()
いますが、次のエラーが発生します。
Fatal error: Call to undefined function money_format()
このエラーについて検索するとmoney_format()
、システムに機能がある場合にのみ関数が定義されておりstrfmon
(たとえば、Windows には機能がない)、関数が PHP 8.0 から削除されていることがわかります。
利用可能な同等の PHP 関数はありますか?
PHP で関数を使用しようとしてmoney_format()
いますが、次のエラーが発生します。
Fatal error: Call to undefined function money_format()
このエラーについて検索するとmoney_format()
、システムに機能がある場合にのみ関数が定義されておりstrfmon
(たとえば、Windows には機能がない)、関数が PHP 8.0 から削除されていることがわかります。
利用可能な同等の PHP 関数はありますか?
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р.
また、そのフォーマットされたお金の文字列を解析してフロートに戻す方法についての私の回答も参照してください。
<?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
@Y Talansky 関数は次のコードになる可能性があります。
function number_to_money($value, $symbol = '$', $decimals = 2)
{
return $symbol . ($value < 0 ? '-' : '') . number_format(abs($value), $decimals);
}
@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
?>