PHP money_format填充号码分组

时间:2012-11-13 23:00:59

标签: php formatting numbers

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

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

使用以下代码

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

当$ sum小于1000时,它的工作时间为EXCEPT。例如,使用

$sum=1550.00;

(如预期的那样)上面的代码输出

$01,550.00 

然而,

$sum=167.00;

以上代码段输出

$000167.00
显然,这不是我需要的。根据{{​​3}}

  

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

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

有关如何为填充数字进行正确格式化的任何建议都将不胜感激。

谢谢!

1 个答案:

答案 0 :(得分: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;
}