0

基本上,我试图在一个排列良好的列中输出一堆数字,格式如下:

$##,###.##
$##,###.##

使用以下代码

setlocale(LC_MONETARY, 'en_US.utf8');
money_format('%=0(#5.2n',$sum)

它在 $sum 小于 1000 时除外。例如,使用

$sum=1550.00;

(如预期)上述代码输出

$01,550.00 

然而,随着

$sum=167.00;

上面的片段输出

$000167.00

显然,这不是我需要的。根据文档

即使填充字符是数字,分组分隔符也不会应用于填充字符。

因此,这是该函数的预期行为。似乎没有意义,但这就是它的工作原理。

任何有关如何为填充数字获得正确格式的建议将不胜感激。

谢谢!

4

1 回答 1

0

您可以构建自己的格式化功能。localeconv()将为您提供分隔符等数据以及货币符号的位置。这是我使用的,适合我的需求:

function my_number_format($amount) {
    // Get separators
    $l = localeconv();

    $str = number_format($amount, 2, $l['decimal_point'], $l['thousands_sep']);

    // manual padding
    while (strlen(preg_replace('/[^0-9]/', '', $str)) < 10) {
        $init = preg_replace('/[^0-9].*/', '', $str); // initial all-digit sequence
        $str = '0' . (strlen($init) == 3 ? $l['thousands_sep'] : '') . $str; 
    }

    return $amount;
}
于 2014-03-12T10:30:26.800 回答