为啥数字格式不正常?
Posted
技术标签:
【中文标题】为啥数字格式不正常?【英文标题】:Why is the number formatting abnormal?为什么数字格式不正常? 【发布时间】:2014-04-25 07:43:39 【问题描述】:所以我想显示一个计数器,每个字符都包含在一个标签中,并添加一个千位分隔符。
数字必须至少为 3 个字符长。
案例 1:
我拿了一个号码12
代码:
$number = 12 //number 12
$number = number_format($number, 0, '', ','); //add a thousand seprator
$number = str_pad($number,3,0,STR_PAD_LEFT); //pad if length less than 3
$counter = "";
foreach (str_split($number) as $key => $digit)
$counter .= '<b>' . $digit . '</b>';
输出:012
(忽略<b>
标签)
案例 2:
我拿了一个号码1234
代码:
$number = 1234 //number 1234
$number = number_format($number, 0, '', ','); //add a thousand seprator
$number = str_pad($number,3,0,STR_PAD_LEFT); //pad if length less than 3
$counter = "";
foreach (str_split($number) as $key => $digit)
$counter .= '<b>' . $digit . '</b>';
输出:1,234
(忽略<b>
标签)
案例 3:
我拿了一个号码0012
代码:
$number = 0012 //number 0012
$number = number_format($number, 0, '', ','); //add a thousand seprator
$number = str_pad($number,3,0,STR_PAD_LEFT); //pad if length less than 3
$counter = "";
foreach (str_split($number) as $key => $digit)
$counter .= '<b>' . $digit . '</b>';
输出:010
(忽略<b>
标签)
那么案例3出了什么问题?
更新:
如何避免这种情况?
【问题讨论】:
0012
是不是小数。它被解释为记录的八进制表示法。
@arkascha 嗯,它是一个整数。八进制整数... :)
【参考方案1】:
答案是,因为八进制:
$number = 0012;
0
前缀使 php 使用八进制到十进制转换来转换 12
;和 12 八进制 == 10 十进制。
为避免这种情况,您可以改用字符串值:
$number = '0012';
另请参阅:Integer notation
【讨论】:
如何避免这种情况?所以将其定义为(int)
将是合适的
@blo 更新了答案。 (int) 类型转换无济于事,因为它已经是一个整数。
@blo 整数不包括格式信息。 “0012”(忽略八进制)与 12 与 0000012 具有相同的 值。整数本身就是 值“12”,前导零无关紧要给它。您只在格式化输出数字时添加前导零。
我试过'0012'
它输出012
而预期是0,012
。我猜这种格式无效,对吗?
@blo 那是因为'0012'
表示为一个数字小于一千,因此不需要千位分隔符。如果这是您的要求,则不应使用 number_format()
。以上是关于为啥数字格式不正常?的主要内容,如果未能解决你的问题,请参考以下文章