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在数字中添加千位分隔符并保持前导零的主要内容,如果未能解决你的问题,请参考以下文章