PHP在数字中添加千位分隔符并保持前导零

Posted

技术标签:

【中文标题】PHP在数字中添加千位分隔符并保持前导零【英文标题】:PHP add thousand separators to number and keep leading zeros 【发布时间】:2013-10-14 13:51:27 【问题描述】:

我正在尝试使用 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

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

谢谢!

【问题讨论】:

先使用number_format,然后使用str_pad? 你真的需要number_format 吗? str_pad 输入必须是字符串,而不是整数。 我不需要数字格式,但我需要那个逗号! :) @manolo - 如果 str_pad() 输入不是字符串,PHP 会将其转换为字符串 【参考方案1】:

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

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" 

【讨论】:

差不多了。它可以按预期工作,直到输入 6 位数字,但如果使用 6 位数字,它会在数字的开头添加另一个逗号和零。 我的想法是长度总是小于你的数字。现在很容易修复:p 谢谢!现在来解决这个问题!【参考方案2】:

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

echo sprintf('%06d', 550);

【讨论】:

我有,但 number_format 删除了逗号。我需要逗号和前导零,所以数字将输出为 000,500【参考方案3】:

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

<?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

【讨论】:

【参考方案4】:

一个带有 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
/**/

【讨论】:

以上是关于PHP在数字中添加千位分隔符并保持前导零的主要内容,如果未能解决你的问题,请参考以下文章

php添加千位分隔符而不调整小数位

PHP在总和中添加千位分隔符[重复]

PHP字符串函数 number_format(以千位分隔符方式格式化一个数字)

将千位分隔符添加到任何数字,即使它包含特殊字符

写一个js函数,添加千位分隔符

打印数字时添加千位分隔符[重复]