2016-09-12 2 views
2

je suis tombé sur cet exemple dans la documentation PHP:PHP Manual: Conversion de nombres dans Is_Numeric Exemple 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; 
    } 
} 
?> 

Sortie:

'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 

Les cinq exemples après '42' tout est évaluée à la '1337'. Je peux comprendre pourquoi c'est le cas pour '1337e0' (notation scientifique), mais je ne comprends pas pourquoi c'est le cas pour le reste d'entre eux.

Je n'ai pas trouvé quelqu'un qui le mentionne dans les commentaires de la documentation et je ne l'ai pas trouvé demandé ici, donc quelqu'un peut-il expliquer pourquoi '0x539', '02471' et '0b10100111001' tous évaluent à '1337'.

Répondre

2

Lors de la sortie tous les nombres sont convertis en représentation normale. Ce qui est un système de nombre décimal, et une notation non scientifique (par exemple 1e10 - flotteur scientifique).

Hex:

nombres hexadécimaux commencent par 0x et sont suivies par l'une des 0-9a-f.

0x539 = 9*16^0 + 3*16^1 + 5*16^2 = 1337 

Octal:

numéros Octal commencent par un 0 et ne contenir que les entiers 0-7.

02471 = 1*8^0 + 7*8^1 + 4*8^2 + 2*8^3 = 1337 

binaire:

Les nombres binaires commencent 0b et contiennent 0 s et/ou 1 s.

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