【问题标题】:How do I format a number to a dollar amount in PHP如何在 PHP 中将数字格式化为美元金额
【发布时间】:2010-09-22 15:10:19
【问题描述】:

如何将数字转换为显示美元和美分的字符串?

eg:
123.45    => '$123.45'
123.456   => '$123.46'
123       => '$123.00'
.13       => '$0.13'
.1        => '$0.10'
0         => '$0.00'

【问题讨论】:

  • 你有什么特定的编程语言吗?
  • 我想它应该是具体的 - 我现在会改变它。
  • 小心将浮点格式化为某个数字所引入的隐式舍入。如果有两个 $0.015 的项目,您可能会遇到 2 + 2 = 3 的情况。还要注意,浮点数不能准确地保存像 0.1 这样的简单值。
  • 你应该使用整数并存储美分的数量,而不是使用浮点数,否则你会一路损失一些美分。

标签: php formatting currency


【解决方案1】:

在 PHP 和 C++ 中,您可以使用 printf() 函数

printf("$%01.2f", $money);

【讨论】:

  • 内置的PHP函数真的很方便。
【解决方案2】:

PHP 还有money_format()

这是一个例子:

echo money_format('$%i', 3.4); // echos '$3.40'

这个函数实际上有很多选项,请转到我链接到的文档来查看它们。

注意:money_format 在 Windows 中未定义。


更新:通过 PHP 手册:https://www.php.net/manual/en/function.money-format.php

警告:此函数 [money_format] 自 PHP 7.4.0 起已弃用。强烈建议不要依赖此函数。

相反,请查看NumberFormatter::formatCurrency

    $number = "123.45";
    $formatter = new NumberFormatter('en_US', NumberFormatter::CURRENCY);
    return $formatter->formatCurrency($number, 'USD');

【讨论】:

  • 来自文档:注意:函数 money_format() 仅在系统具有 strfmon 功能时才定义。例如,Windows 没有,因此 money_format() 在 Windows 中是未定义的。
  • 理论上我最喜欢这种方法,但为什么我的输出是 $USD 3.40。你知道我可以改变什么参数来获得上面的输出(没有“美元”)吗?显然,我更愿意在没有 str_replace 或正则表达式的情况下这样做。
  • 找到答案here。只需执行 money_format('%.2n', 3.4);
  • 这个功能现在被弃用了吗?当我使用它时,它现在是“未定义的”。
  • 但是money_format('$%i', 3.4) 并没有像大多数人喜欢的那样处理底片。
【解决方案3】:

如果你只是想要一些简单的东西:

'$' . number_format($money, 2);

number_format()

【讨论】:

  • 请注意,这将在每个三位数分组后添加一个逗号(或您的区域设置中的等效项)。这可能是需要的,但如果您没有预料到,可能会非常混乱。
  • 不使用千位分隔符:'$' . number_format($money, 2, '.', '');
  • 这不适用于负数,我们使用 -$69.42 而不是 $-69.42
【解决方案4】:

我尝试了money_format(),但它根本不适合我。然后我尝试了以下一个。它对我来说很完美。希望它也能以正确的方式为您工作.. :)

你应该用这个

number_format($money, 2,'.', ',')

它将以货币格式显示货币编号,最多 2 位小数。

【讨论】:

    【解决方案5】:

    在 php.ini 中添加(如果缺少):

    #windows
    extension=php_intl.dll
    
    #linux
    extension=php_intl.so
    

    然后这样做:

    $amount = 123.456;
    
    // for Canadian Dollars
    $currency = 'CAD';
    
    // for Canadian English
    $locale = 'en_CA';
    
    $fmt = new \NumberFormatter( $locale, \NumberFormatter::CURRENCY );
    echo $fmt->formatCurrency($amount, $currency);
    

    【讨论】:

      【解决方案6】:
      /*     Just Do the following, */
      
      echo money_format("%(#10n","123.45"); //Output $ 123.45
      
      /*    If Negative Number -123.45 */
      
      echo money_format("%(#10n","-123.45"); //Output ($ 123.45)
      

      【讨论】:

        【解决方案7】:

        请注意,在 PHP 7.4 中,money_format() 函数是deprecated。它可以被 intl NumberFormatter 功能替换,只需确保启用 php-intl 扩展。这是一个很小的努力,而且值得,因为您可以获得很多可定制性。

        $f = new NumberFormatter("en", NumberFormatter::CURRENCY);
        $f->formatCurrency(12345, "USD"); // Outputs "$12,345.00"
        

        Darryl Hein 提到的仍然适用于 7.4 的快速方法:

        '$' . number_format($money, 2);
        

        【讨论】:

        • 我的 PHP 缺少 Intl 扩展,所以这让我走上了正轨!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-26
        相关资源
        最近更新 更多