2016-07-26 13 views
2

私はゼロに向かって(int)ラウンド数でキャストすることを理解し、その後私が10以外の塩基でチャンスをうかがっ開始し、現在、私は(int)が行う他に何を正確にはわからない:PHPでは、(int)実際に何をしていますか?

$a = 050; // an octal number 

echo $a; // output is ----> 40 

しかし

$a = '050'; 

echo (int)$a; // output is ----> 50 

だから私は(int)にゼロ以外に丸めてゼロ以外のクリップも描くと思っていました。しかし、その後、私はバイナリと(上記の)2番目のコードブロックと同じ運動を行う場合、私は私が期待するもの得ることはありません:

$a = '0b010'; 

echo (int)$a; // output is ----> 0 

と16進数:

でも小数点の科学を使用して
$a = '0x050'; 

echo (int)$a; // output is ----> 0 

$a = 5e6; 
$b = '5e6'; 

echo $a; // output is ----> 5000000 
echo (int)$b; // output is ----> 5 

(int)を使用して整数にキャストすることは本当に何を意味している:表記はいぶかしげな結果を与えますか?浮動小数点数で小数点以下を取り除く以外に、(int)は文字単位でキャスト文字列を解析し、先行する数値、ゼロ以外の文字の連結を返しますか?このように:

function intCast($str) { 

    $length = strlen($str); 

    $returnVal = ''; 

    for($i = 0; $i < $length; $i++) { 

     // Note: ord() values 48 to 57 represent 0 through 9 

     if ($returnVal === '' && ord($str[$i]) == 48) { 

      continue; // leading zeroes are OK but don't concatenate 

     } else if (ord($str[$i]) > 48 && ord($str[$i]) < 58) { 

      $returnVal .= $str[$i]; 

     } else { 

      break; 

     } 

    } 


    return (strlen($returnVal) > 0) ? $returnVal : 0; 

} 

***このlinkは十分な答えを提供するようには思えないことに注意してください。

+1

私は本当にリンクされた質問が十分な答えを提供しない理由は分かりません。 – Jocelyn

+1

[documentation](http://php.net/manual/en/language.types.string.php#language.types.string.conversion)は、文字列を数値に変換する方法を示しています。浮動小数点数についての部分を無視すると、それがintのためにどのように動作するかがわかります。 –

+1

'$ a = 050'は、050が8進数であると考えられるので' 40 'をエコーし​​ます。 – Aaron

答えて

3

'050'は文字列で、型キャストを行うことで、PHPの最初の仕事は、その文字列を正規化することである。

echo '050' + 1 -> echo '50' + 1 -> echo 50 + 1 -> echo 51 -> 51 

050自体によって進数で、それはすでに整数ですが、これだけの事PHPをしなければなりませんdoは、出力のためにbase10番号に変換します:

echo 050 + 1 -> echo 40 + 1 -> echo 41 -> 41 
+0

意味がある...科学的表記法では、(int)は最初に '1e6'を実際の数に変換せず、100000を出力しません...それは数字1として '1e6'それは何のように見えるか –

+0

バイナリの "文字列" '0b111'は(int)でキャストされたものではなく、数字の後に数字が0以外の数字ですか? –

+1

'b'は有効な整数ではないので、' 0b11' - > 'b11' - >' 0'のように文字列 - > int変換を行うと先行するゼロが削除されます。それは16進数ですが、 '0xb'ではありません –

関連する問題