【问题标题】:Print Currency Number Format in PHP在 PHP 中打印货币数字格式
【发布时间】:2011-04-30 03:52:33
【问题描述】:

我有一些价格值要显示在我的页面中。

我正在编写一个函数,它采用浮动价格并返回带有货币代码的格式化货币 val..

例如,fnPrice(1001.01) 应该打印 $ 1,000.01

【问题讨论】:

标签: php formatting currency


【解决方案1】:

参考链接:https://www.php.net/manual/en/function.number-format.php

$amount = 1235.56
echo number_format($amount, 2, '.', ',');

输出为:1,235.56

如果您在输出中不需要逗号。请删除函数内的逗号。

例如

$amount = 1235.56
echo number_format($amount, 2, '.', '');

输出为:1235.56

【讨论】:

    【解决方案2】:

    试试

    echo "$".money_format('%i',$price);
    

    输出将是

    1.06 美元

    【讨论】:

    • 根据PHP Docs:自 PHP 7.4.0 起,此函数已弃用,自 PHP 8.0.0 起已移除。强烈建议不要依赖此函数。
    【解决方案3】:

    来自docs

    <?php
    
    $number = 1234.56;
    
    // english notation (default)
    $english_format_number = number_format($number);
    // 1,235
    
    // French notation
    $nombre_format_francais = number_format($number, 2, ',', ' ');
    // 1 234,56
    
    $number = 1234.5678;
    
    // english notation without thousands separator
    $english_format_number = number_format($number, 2, '.', '');
    // 1234.57
    
    ?>
    

    【讨论】:

      【解决方案4】:

      PHP 有一个名为money_format 的函数来执行此操作。阅读此here。

      【讨论】:

      • 这个函数money_format在php 7.1版上不起作用
      【解决方案5】:

      我构建了这个小函数来自动将任何内容格式化为一种不错的货币格式。

      function formatDollars($dollars)
      {
          return "$".number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)),2);
      }
      

      编辑

      有人指出,这不会显示负值。我把它分成两行,这样更容易编辑格式。如果是负数,用括号括起来:

      function formatDollars($dollars)
      {
          $formatted = "$" . number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)), 2);
          return $dollars < 0 ? "({$formatted})" : "{$formatted}";
      }
      

      【讨论】:

      • 这不会保留负值
      • 这是真的。我已经更新了函数以包括负数支持。谢谢@FlyingNimbus
      【解决方案6】:

      使用 PHP 5.3+ 中的 intl 扩展,您可以使用 NumberFormatter 类:

      $amount = '12345.67';
      
      $formatter = new NumberFormatter('en_GB',  NumberFormatter::CURRENCY);
      echo 'UK: ', $formatter->formatCurrency($amount, 'EUR'), PHP_EOL;
      
      $formatter = new NumberFormatter('de_DE',  NumberFormatter::CURRENCY);
      echo 'DE: ', $formatter->formatCurrency($amount, 'EUR'), PHP_EOL;
      

      打印:

       UK: €12,345.67
       DE: 12.345,67 €
      

      【讨论】:

      • 拥有一个不需要先转换为浮点数的解决方案非常重要。使用带有货币的浮点数非常危险。
      【解决方案7】:

      最简单的答案是number_format()。

      echo "$ ".number_format($value, 2);
      

      如果您希望您的应用程序能够使用多种货币和支持区域设置的格式(例如1.000,00,我们中的一些欧洲人),它会变得有点复杂。

      有 money_format(),但它在 Windows 上不起作用,并且依赖于 setlocale(),在我看来这很垃圾,因为它需要在服务器端安装(任意命名的)语言环境包。

      如果您想认真国际化您的应用程序,请考虑使用完整的国际化库,例如 Zend Framework 的 Zend_Locale 和 Zend_Currency。

      【讨论】:

      • 对于负值,你会得到类似 $-123.45 的值,但是正确的格式应该是 -$123.45。
      • @ZurabWeb 您找到解决此问题的方法了吗?
      • @kimbarcelona $sign = "-"; $金额 = "-500"; if(strpos($amount, $sign) !== false){ l.trim($amount, $sign); echo "-$".number_format($intval(amount), 2);}
      【解决方案8】:

      sprintf() 是用于各种字符串格式化的 PHP 函数 http://php.net/manual/en/function.sprintf.php

      我使用这个功能:

      function formatDollars($dollars){
        return '$ '.sprintf('%0.2f', $dollars);
      }
      

      【讨论】:

      • 这不会添加逗号(千位分隔符)
      • 原谅挖坟。您可以将$dollars(在sprintf() 中)包装在number_format() 中。这将添加逗号
      猜你喜欢
      • 2012-01-22
      • 2011-04-30
      • 1970-01-01
      • 1970-01-01
      • 2017-03-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      相关资源
      最近更新 更多