Liczby całkowite ( integer )

Typ integer to liczba całkowita , należąca do przedziału Z = { ... , -2 , -1 , 0 , 1 , 2 , .. . }.

Zobacz też : Liczby całkowite dużej wielkości oraz Liczby zmiennoprzecinkowe

Składnia

Liczby całkowite mogą być zapisane w notacji dziesiętnej ( opartej na 10) , szesnastkowej (opartej na 16 ) lub ósemkowej (opartej na 8) , opcjonalnie poprzedzone znakiem ( - lub + ) .

Aby zapisać liczbę w notacji ósemkowej , należy poprzedzić właściwą liczbę symbolem 0 ( zero ) . W notacji szesnastkowej liczbę należy poprzedzić symbolem 0x .

Przykład 7-1 . Notacja liczb całkowitych

 
$a

 
=

 
1234

 
;

 
#

 
liczba

 
dziesiętna

 
$a

 
=

 
-123

 
;

 
#

 
ujemna

 
liczba

 
dziesiętna

 
$a

 
=

 
0123

 
;

 
#

 
liczba

 
ósemkowa

 
(odpowiednik

 
dziesiętnej

 
83

 
)

 
$a

 
=

 
0x1A

 
;

 
#

 
liczba

 
szesnastkowa

 
(odpowiednik

 
dziesiętnej

 
26

 
)



Maksymalna wielkość liczby całkowitej jest zależna od platformy operacyjnej, zwykle jest to około dwa miliardy (jest to 32 bity ze znakiem). PHP nie obsługuje liczb całkowitych bez znaku.

Wyjście poza zakres liczb całkowitych

W przypadku zapisania liczby całkowitej wykraczającej poza zakres typu integer , liczba ta zostanie potraktowana jako typ float . Również jeśli rezultat operacji będzie wykraczał poza typ integer , jako wynik zostanie zwrócony typ float .

 
$duża_liczba

 
=

 
2147483647

 
;

 
var_dump($duża_liczba)

 
;

 
/

 
/

 
wynik

 
:

 
int(2147483647

 
)

 
$duża_liczba

 
=

 
2147483648

 
;

 
var_dump($duża_liczba)

 
;

 
/

 
/

 
wynik

 
:

 
float(2147483648

 
)

 
/

 
/

 
tak

 
samo

 
dzieje

 
się

 
przy

 
wartościach

 
szesnastkowych

 
:

 
var_dump

 
(

 
0x80000000

 
)

 
;

 
/

 
/

 
wynik

 
:

 
float(2147483648

 
)

 
$million

 
=

 
1000000

 
;

 
$duża_liczba

 
=

 
50000

 
*

 
$million

 
;

 
var_dump($duża_liczba)

 
;

 
/

 
/

 
wynik

 
:

 
float(50000000000

 
)



Ostrzeżenie

Niestety , błąd w PHP powodował czasem nieprawidłową pracę z liczbami ujemnymi . Na przykład : wynikiem działania -50000 * $million była liczba -429496728 . Błąd ten pojawiał się tylko przy liczbach ujemnych i nie dotyczył wartości dodatnich .

Powyższy problem został rozwiązany w PHP 4.1.0 .



W PHP nie ma operatora dzielenia całkowitego . 1 / 2 daje wynik typu float o wartości 0.5 .

 
var_dump(

 
25

 
/

 
7

 
)

 
;

 
/

 
/

 
wynik

 
:

 
float(3.5714285714286

 
)





Konwersja na liczby całkowite

Do jawnej konwersji wartości na typ integer używa się operatora rzutowania ( int ) lub (integer ) . W większości przypadków jednak rzutowanie nie jest potrzebne , gdyż wartość zostanie skonwertowana automatycznie , o ile operator , funkcja lub struktura kontrolna wymaga argumentu typu integer .

Zobacz też wykorzystywanie typów danych .

Z boolowskiej

FALSE będzie mieć wartość 0 ( zero) , a TRUE będzie mieć wartość 1 (jeden ) .

Z liczb zmiennoprzecinkowych

Przy konwersji z liczb zmiennoprzecinkowych do całkowitych , liczba zostanie zaokrąglona w dół .

Jeśli liczba zmiennoprzecinkowa jest poza zakresem liczb całkowitych , ( zwykle + / - 2.15e+9 = 2^31 ) , wynik operacji rzutowania jest niezdefiniowany , ponieważ liczba zmiennoprzecinkowa nie ma odpowiedniej precyzji , aby zwrócić dokładną liczbę całkowitą . W tej sytuacji nie pojawi się żadne ostrzeżenie ani informacja odnośnie powstałego błędu !

Ostrzeżenie

Nigdy nie należy rzutować nieznanego ułamka do typu integer , gdyż może to doprowadzić do otrzymania nieprzewidywalnych wyników .

 
echo

 
(

 
int

 
)

 
(

 
(0.1+0.7

 
)

 
*

 
10

 
)

 
;

 
/

 
/

 
wyświetla

 
7

 
!



Więcej informacji na ten temat w rozdziale precyzja liczb zmiennoprzecinkowych .