2

我正在尝试使用 PHP 为数字添加千位分隔符,同时保留前导零(这是应用程序设计的一部分,前导 0 保留,以便人们可以看到数字朝着设定的目标增长 - 一个6 位数)。

如果当前计算的数字长度小于 6 位,我最初的尝试是使用 str_pad 添加前导零。然后添加我使用 number_format 的逗号。明显的问题是 number_format 删除了前导 0。

$num = 550;
$num_padded = str_pad($num, 6, '0', STR_PAD_LEFT);
echo number_format($num_padded);  

所以返回 550 而不是 000,550

有谁知道实现我正在寻找的格式的可靠方法?

谢谢!

4

4 回答 4

3

我想到了这个简单的技巧:

function padAndFormat($number, $length)
{
   if(strlen($number)>=$length)
   {
      return number_format($number);
   }
   $number = number_format('1'.str_pad($number, $length-1, '0', STR_PAD_LEFT));
   $number[0] = '0';
   return $number;
}

//var_dump(padAndFormat('517', 6)); //string(7) "000,517" 
于 2013-10-14T13:55:47.650 回答
0

您是否尝试过使用sprintf?例如

echo sprintf('%06d', 550);
于 2013-10-14T13:57:30.417 回答
0

我不需要数字格式,但我需要那个逗号!:)

<?php
$zeroes=0;
$num = 550;
$num_padded = str_pad($zeroes, 3, '0', STR_PAD_LEFT);
$num_padded = str_pad($num_padded,strlen($num_padded)+strlen($zeroes), ',', STR_PAD_RIGHT);
$num_padded = str_pad($num_padded,strlen($num_padded)+strlen($num), $num, STR_PAD_RIGHT);
echo $num_padded;

输出 :

000,550
于 2013-10-14T14:08:58.093 回答
0

一个带有 PHP 字符串操作的 Liner。适用于任意位数:

function pad($number, $min_digits){
    return strrev(implode(",",str_split(str_pad(strrev($number), $min_digits, "0", STR_PAD_RIGHT),3)));
}

/* Output for 9 digits
0,000,001
0,000,012
0,000,123
0,001,234
0,012,345
0,123,456
1,234,567
12,345,678
123,456,789
/**/
于 2015-02-11T00:16:57.137 回答