私はゼロに向かって(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は十分な答えを提供するようには思えないことに注意してください。
私は本当にリンクされた質問が十分な答えを提供しない理由は分かりません。 – Jocelyn
[documentation](http://php.net/manual/en/language.types.string.php#language.types.string.conversion)は、文字列を数値に変換する方法を示しています。浮動小数点数についての部分を無視すると、それがintのためにどのように動作するかがわかります。 –
'$ a = 050'は、050が8進数であると考えられるので' 40 'をエコーします。 – Aaron