我试图使用money_format
功能。
<?php
$number = 1299.46;
setlocale(LC_MONETARY, 'en_US');
echo money_format('%i', $number); // Outputs 1299.46
虽然它应该打印$ sign或USD?
我在linux托管上。
由于
答案 0 :(得分:11)
money_format
将无法正常工作。
例如,在Debian上,'en_US'不是有效的语言环境 - 您需要'en_US.UTF-8'或'en_US.ISO-8559-1'。
答案 1 :(得分:1)
首先你必须知道php版本正在使用
如果您不确定如何检查创建名为 info.php的文件
插入代码=&gt;
<?php phpinfo(); ?>
(PHP 4 >= 4.3.0, PHP 5)
$number = 1234.56;
// let's print the international format for the en_US locale
setlocale(LC_MONETARY, 'en_US');
echo money_format('%i', $number) . "\n";
// USD 1,234.56
// Italian national format with 2 decimals`
setlocale(LC_MONETARY, 'it_IT');
echo money_format('%.2n', $number) . "\n";
// Eu 1.234,56
注意:函数money_format()仅在系统具有时定义 strfmon功能。例如,Windows没有,所以money_format() 在Windows中未定义。
您可以使用替代方案 (PHP 5&gt; = 5.3.0,PECL intl&gt; = 1.0.0)
示例#1 numfmt_format_currency()示例
$fmt = numfmt_create( 'de_DE', NumberFormatter::CURRENCY );
echo numfmt_format_currency($fmt, 1234567.891234567890000, "EUR")."\n";
echo numfmt_format_currency($fmt, 1234567.891234567890000, "RUR")."\n";
$fmt = numfmt_create( 'ru_RU', NumberFormatter::CURRENCY );
echo numfmt_format_currency($fmt, 1234567.891234567890000, "EUR")."\n";
echo numfmt_format_currency($fmt, 1234567.891234567890000, "RUR")."\n";
示例#2 OO示例
$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.net
的示例如果无法替代,则解决方案是创建方法 满足您的需求。
我希望帮助你
答案 2 :(得分:0)
它不应该给予$或USD,请咨询documentation。但是,您可以执行以下操作:
echo money_format('$%i', $number)
这将给出预期的结果,但当然它不是一个动态的解决方案。
答案 3 :(得分:0)
语言环境是操作系统定义的常量。
在下面的示例中,我使用Ubuntu
。
检查支持哪些语言环境:
locale -a
添加所需的语言环境(例如ru
)
sudo locale-gen ru_RU
sudo locale-gen ru_RU.UTF-8
运行此更新命令
sudo update-locale
重新启动php fpm(像这样检查您的php版本服务名称service --status-all
)
sudo service php7.2-fpm restart
但是要小心,因为您最有可能将Apache
与“ mod_php”一起使用,因为它是最受欢迎的。当setlocale()不是线程安全的时,这种方法可以在多线程环境中工作。查看here了解详情