提问者:小点点

在PHP中,(int)真正做什么?


我知道使用(int)进行强制转换会将数字四舍五入为零,但后来我开始使用10以外的碱基,现在我不确定(int)还能做什么:

$a = 050; // an octal number

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

然而

$a = '050';

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

所以我认为 (int) 除了四舍五入到零之外,还会剪辑前导零。但是,如果我使用二进制执行与第二个代码块(上面)相同的练习,我没有得到我期望的:

$a = '0b010';

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

用十六进制表示:

$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;

}

* * *请注意,此链接似乎没有提供足够的答案。


共1个答案

匿名用户

< code>'050'是一个字符串,PHP在进行类型转换时的第一项工作是规范化该字符串:

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

<code>050</code>本身是一个八进制数,它已经是一个整数,所以PHP唯一需要做的就是将它转换为一个以10为基数的数字进行输出:

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