Egész számok

Egy integer a következő halmaz része: Z = {..., -2, -1, 0, 1, 2, ...}.

Lásd még a Tetszőleges pontosságú egészek és a Lebegőpontos számok című részeket.

Szintaxis

Az egészek megadhatók decimális (10 alapú), hexadecimális (16 alapú) vagy oktális (8 alapú) számként, opcionális előjellel (- vagy +).

Ha az oktális formát választod, a számot egy 0 (nulla) jeggyel kell kezdened, ha a hexadecimálisat, akkor 0x-el.

Példa 6-1. Egész értékek


$a = 1234; # decimális szám
$a = -123; # negatív szám
$a = 0123; # oktális szám (megegyezik a 83 decimális számmal)
$a = 0x1A; # hexadecimális szám (megegyezik a 26 decimális számmal)
       
Az egészek maximális mérete operációs rendszertől függ, az átlagos érték a két milliárd (32 bites előjeles egész).

Megjegyzés: PHP-ben nincs egész osztás. Az 1/2 művelet a 0.5 float (lebegépontos) értéket eredményezi.

Egészek értelmezési határának túllépése

Az integer típus értelmezési tartományán kívül eső egész értékek float típussá alakulnak.


$nagy_szam =  2147483647;
var_dump($nagy_szam);
// kimenete: int(2147483647)
$nagyobb_szam =  2147483648;
var_dump($nagyobb_szam);
// kimenete: float(2147483648)

// ez működik hexadecimálisan megadott egészekre is: 
var_dump( 0x80000000 );  
// kimenete: float(2147483648)  

       

Ráadásul ha valamilyen függvény, vagy operátor az integer típus értelmezési tartományán kívül eső értéket ad, a float típussá alakítás automatikusan megtörténik.


$millio = 1000000;
$nagy_szam =  50000 * $millio;
var_dump($nagy_szam);
// kimenete: float(50000000000)
       

Figyelem

Sajnálatosan meg kell említenünk, hogy egy hiba van a PHP-ben (még a 4.0.6-osban is, de feltehetően a 4.0.7-es már javítja a hibát). Ez az átalakítás nem működik mindig pontosan, ha negatív számokkal is számolunk. Például: ha a -50000 * $millio értéket kérjük, a válasz: -429496728. Ha mindkét operandus pozitív, nincs semmi probléma.

Egész értékké alakítás

Ha kifejezetten integer típusúvá szeretnél alakítani egy értéket, használd az (int) vagy az (integer) típusátalakítást. A legtöbb esetben azonban nem kell ezt alkalmaznod, mivel az érték automatikusan átalakul, ha egy operátor, függvény, vagy vezérlési szerkezet integer típusú argumentumot vár.

Lásd még a Bűvészkedés a típusokkal című részt.

Átalakításboolean (logikai) értékekről

A FALSE (hamis) érték a 0 (nulla) egész számmá alakul, a TRUE (igaz) érték az 1 (egy) egész számot adja.

Átalakítás lebegőpontos értékekről

Lebegépontos számok egész értékké alakításakor a szám tört része elvész, azaz lefelé kerekítés történik.

Ha a lebegőpontos szám az egész tartományon kívül esik (általában +/- 2.15e+9 = 2^31), az eredmény nem definiált, mivel a lebegőpontos szám nem rendelkezik elég precizitással, hogy pontos egész eredményt kapj. Sem warning, sem notice szintű hiba nem lép fel ebben az esetben!

Figyelem

Soha ne alakíts egy ismeretlen törtszámot integer típusúvá, mivel ez időnként nem várt eredményekhez vezethet.


echo (int) ( (0.1+0.7) * 10 ); // kiírja, hogy 7!
         

Lásd a a lebegőpontos számok pontotsságának problémái című részt.

Átalakítás más típusokról

Figyelem

Az egésszé alakítás viselkedése más típusokra nem definiált. Jelenleg ezek az átalakítások megegyeznek azzal, mintha először logikai, majd utána egész értékké alakítottad volna a kiindulási értéket. Erre a viselkedeésre azonban nem szabad építeni, mivel minden figyelmeztetés nélkül megváltozhat.