PHP将数字增加一个

时间:2013-03-07 01:19:07

标签: php math numbers

这是一个棘手的问题:我想为此数字添加+1:012345675901,预期结果为:012345675902。相反,当我这样做时,我得到2739134

echo (012345675901+1);

当我尝试:

echo ('012345675901'+1);

我得到了这个:12345675902这与我需要的非常接近,但它删除了前导零。

当我这样做时:

echo (int) 012345675901;

我得到2739133。我也试过bcadd()但没有成功:

echo bcadd(012345675901, 1);

导致2739134

我知道我在这里遗漏了一些东西。我真的很感谢你的帮助!

更新1 答案1说这个数字是八进制的:

function is_octal($x) {
    return decoct(octdec($x)) == $x;
}

$number = is_octal(012345675901);
echo var_dump($number);

以上返回 false 。我以为我需要将它从八进制转换为普通字符串但不起作用。我无法避免不使用上述数字 - 我只需要将其增加一个。

编辑2

这是正确的代码:

$str = '012345675901';

$str1 = ltrim($str, '0'); // to remove the leading zero
$str2 = bcadd($str1, 1); // +1 to your result
$str3 = strlen($str); // get the length of your first number
echo str_pad($str2, $str3, '0', STR_PAD_LEFT); // apply zeros

谢谢大家的帮助!上面的代码按预期生成:012345675902

2 个答案:

答案 0 :(得分:8)

前导0将您的号码视为八进制。

输出为字符串所需的前导0纯粹是一种表示形式。

答案 1 :(得分:0)

请参阅代码进行解释。

$str = "012345675901"; // your number
$str1 = ltrim($str, '0'); // to remove the leading zero
$str2 = bcadd($str1, 1); // +1 to your result
$str3 = strlen($str); // get the length of your first number
echo str_pad($str2, $str3, '0', STR_PAD_LEFT); // apply zeros