2016-09-12 1 views
2

я натыкался на этот пример в документации PHP:Руководство по PHP: Преобразование чисел в Is_Numeric Пример 1?

<?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:

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 

Двоичный:

Двоичные числа начинают 0b и содержат 0 с и/или 1 с.

0b10100111001 = 1*2^0 + 1*2^3 + 1*2^4 + 1*2^5 + 1*2^8 + 1*2^10 = 1337 
Смежные вопросы