Liczby całkowite (integer)Podręcznik PHPPoprzedniRozdział 7. Typy danychNastępnyLiczby 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.
Z łańcuchów znaków
Zobacz konwersja
łańcuchów znaków
Z innych typów
Uwaga!
Wynik konwersji do liczb całkowitych z innych typów jest nieokreślony.
Obecnie zachowanie jest takie samo, jakby zmienna została najpierw
skonwertowana do
typu boolowskiego. Nie należy jednak
polegać na tym zachowaniu, gdyż może ono ulec zmianie bez żadnego
ostrzeżenia.
PoprzedniSpis treściNastępnyZmienne Logiczne (Boolowskie - boolean)Początek rozdziałuLiczby zmiennoprzecinkowe (float)
Wyszukiwarka
Podobne podstrony:
language types integerlanguage types arraylanguage types resourcelanguage types type jugglinglanguage types resourcelanguage typeslanguage types objectlanguage types type jugglinglanguage types booleanlanguage types stringlanguage types stringlanguage types floatlanguage typeslanguage types objectlanguage types nulllanguage types stringwięcej podobnych podstron