3

これは難しい問題です: この番号に +1 を追加したい: 012345675901 で、予想される結果は:012345675902です。代わりに、次のようになります2739134:

echo (012345675901+1);

私がしようとすると:

echo ('012345675901'+1);

これ12345675902は必要なものにかなり近いですが、先頭のゼロが削除されます。

私がこれを行うとき:

echo (int) 012345675901;

私は得る2739133。私も成功せずに bcadd() を試しました:

echo bcadd(012345675901, 1);

その結果、2739134.

私はここで何かが欠けていることを知っています。助けていただければ幸いです。

更新 1 回答 1 は、数値が 8 進数であると述べています。

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

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

上記はfalseを返します。これを 8 進数から通常の文字列に変換する必要があると思いましたが、うまくいきませんでした。上記の数値を使用しないことは避けられません。1 ずつ増やす必要があるだけです。

編集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:

4

2 に答える 2

8

リーディング0はあなたの数字を8進数として扱っています。

0文字列としての出力に必要な先頭は、純粋に表現です。

于 2013-03-07T01:19:49.657 に答える
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
于 2013-03-07T01:32:00.753 に答える