money_format()没有显示货币

时间:2015-06-20 17:24:14

标签: php

我试图使用money_format功能。

<?php

$number = 1299.46;

setlocale(LC_MONETARY, 'en_US');
echo money_format('%i', $number); // Outputs 1299.46

虽然它应该打印$ sign或USD?

我在linux托管上。

由于

4 个答案:

答案 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

  1. 检查支持哪些语言环境:

    locale -a
    
  2. 添加所需的语言环境(例如ru

    sudo locale-gen ru_RU
    sudo locale-gen ru_RU.UTF-8
    
  3. 运行此更新命令

    sudo update-locale 
    
  4. 重新启动php fpm(像这样检查您的php版本服务名称service --status-all

    sudo service php7.2-fpm restart
    

但是要小心,因为您最有可能将Apache与“ mod_php”一起使用,因为它是最受欢迎的。当setlocale()不是线程安全的时,这种方法可以在多线程环境中工作。查看here了解详情