【问题标题】: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(忽略&lt;b&gt;标签)

案例 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(忽略&lt;b&gt;标签)

案例 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(忽略&lt;b&gt;标签)


那么案例3出了什么问题?

更新:

如何避免这种情况?

【问题讨论】:

  • 0012不是小数。它被解释为记录的八进制表示法。
  • @arkascha 嗯,它一个整数。八进制整数... :)

标签: php number-formatting


【解决方案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()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多