基本上,我试图在一个很好地对齐的列中输出一堆数字,格式如下:
$##,###.##
$##,###.##
使用以下代码
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}}
分组分隔符不会应用于填充字符,即使填充字符是数字。
所以,这是函数的预期行为。似乎没有意义,但这就是它的工作原理。
有关如何为填充数字进行正确格式化的任何建议都将不胜感激。
谢谢!
答案 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;
}