在PHP中打印货币数字格式

Koo*_*bin 42 php formatting currency

我的页面中显示了一些价格值.

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

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

Pek*_*ica 117

最简单的答案是number_format().

echo "$ ".number_format($value, 2);
Run Code Online (Sandbox Code Playgroud)

如果您希望您的应用程序能够使用多种货币和区域设置感知格式(1.000,00例如,对于我们这些欧洲人来说),它会变得有点复杂.

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

如果您想要认真地国际化您的应用程序,请考虑使用像Zend Framework的Zend_LocaleZend_Currency这样的完整国际化库.

  • 对于负值,你会得到类似$ -123.45的东西,正确的格式应该是-123.45美元. (4认同)

Mat*_*ieu 55

使用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;
Run Code Online (Sandbox Code Playgroud)

打印:

 UK: €12,345.67
 DE: 12.345,67 €
Run Code Online (Sandbox Code Playgroud)

  • 拥有一个不需要先转换为浮点数的解决方案非常重要.使用货币浮动非常危险. (3认同)

Jim*_*Jim 7

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

我用这个函数:

function formatDollars($dollars){
  return '$ '.sprintf('%0.2f', $dollars);
}
Run Code Online (Sandbox Code Playgroud)

  • 这不会添加逗号(千位分隔符) (6认同)

Jam*_*Jam 7

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

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

编辑

有人指出,这并不显示负值。我把它分成两行,这样编辑格式更容易。如果它是负值,则将其括在括号中:

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