【发布时间】:2016-07-26 17:38:00
【问题描述】:
我知道使用 (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;
}
***请注意,这个link 似乎没有提供足够的答案。
【问题讨论】:
-
我真的不明白为什么链接的问题没有提供足够的答案。
-
documentation 告诉您如何将字符串转换为数字。只需忽略有关浮点数的部分,您就会看到它对 int 的工作原理。
-
$a = 050与40相呼应,因为 050 被视为八进制。 -
@Aaron 我知道八进制部分,但是为什么不同基数的不同字符串表示会被 (int) 区别对待?
-
@TheOneandOnlyChemistryBlob 您刚刚回答了自己的问题。不同的碱基需要不同的处理。