James Thornton logo
James Thornton
Google
Web jamesthornton.com
Internet Business Consultant Call Toll Free: 1 (800) 409-2501
About James Google Profile Electric Speed The Electors Juced Contact Me
JamesThornton.com -> PHP -> Polish -> One Page

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.

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.




Add a comment | Add a link