оценка — PHP Manual: Преобразование чисел в Is_Numeric Пример 1?

Я наткнулся на этот пример в документации 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».

2

Решение

При выводе все числа конвертируются в нормальное представление. Что является десятичной системой счисления и ненаучными обозначениями (например, 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и / или 1s.

0b10100111001 = 1*2^0 + 1*2^3 + 1*2^4 + 1*2^5 + 1*2^8 + 1*2^10 = 1337
2

Другие решения

Это восьмеричные, шестнадцатеричные и двоичные числа.

http://php.net/manual/en/language.types.integer.php

2

По вопросам рекламы [email protected]