问:如何取到一个整数的十位上的数值?
答:先除以 10 再对 10 取余。代码如下:
echo ($number / 10) % 10;
很简单是不是?但这段代码有 bug。你可以运行下面这段代码:
echo PHP_INT_MAX; echo PHP_EOL; // 输出换行 echo (PHP_INT_MAX / 10) % 10; echo PHP_EOL;
输出如下:
可以看到整数 9223372036854775807 的十位数上是 0 ,而我们确得到了 2 ,这是怎么一回事呢?
我们执行下如下代码:
$a = PHP_INT_MAX; var_dump(gettype($a), $a); $b = $a / 10; var_dump(gettype($b), $b); $c = $b % 10; var_dump(gettype($c), $c);
输出为:
可以看到, 9223372036854775807 不能被 10 整除,$a / 10 后得到的是一个浮点数,丢失了精度,这个时候再对 10 取模得到的值就不准了。