Я наткнулся на этот пример в документации PHP:
<?php
$tests = array(
"42",
1337,
0x539,
02471,
0b10100111001,
1337e0,
"not numeric",
array(),
9.1
);
foreach ($tests as $element) {
if (is_numeric($element)) {
echo "'{$element}' is numeric", PHP_EOL;
} else {
echo "'{$element}' is NOT numeric", PHP_EOL;
}
}
?>
Выход:
'42' is numeric
'1337' is numeric
'1337' is numeric
'1337' is numeric
'1337' is numeric
'1337' is numeric
'not numeric' is NOT numeric
'Array' is NOT numeric
'9.1' is numeric
Пять примеров после «42» все оценивают как «1337». Я могу понять, почему это относится к «1337e0» (научная запись), но я не понимаю, почему это относится к остальным.
Я не смог найти никого, кто бы упомянул об этом в комментариях к документации, и я не нашел здесь этого вопроса, поэтому кто-нибудь может объяснить, почему «0x539», «02471» и «0b10100111001» все оценивают как «1337».
При выводе все числа конвертируются в нормальное представление. Что является десятичной системой счисления и ненаучными обозначениями (например, 1e10
— научный поплавок).
Hex:
Шестнадцатеричные числа начинаются с 0x
и сопровождаются любым из 0-9a-f
,
0x539 = 9*16^0 + 3*16^1 + 5*16^2 = 1337
Восьмеричный:
Восьмеричные числа начинаются с 0
и содержат только целые числа 0-7.
02471 = 1*8^0 + 7*8^1 + 4*8^2 + 2*8^3 = 1337
Binary:
Двоичные числа начинаются 0b
и содержать 0
и / или 1
s.
0b10100111001 = 1*2^0 + 1*2^3 + 1*2^4 + 1*2^5 + 1*2^8 + 1*2^10 = 1337
Это восьмеричные, шестнадцатеричные и двоичные числа.