Liczby i obliczenia
🎯 Po tej lekcji wykonasz obliczenia na liczbach całkowitych i zmiennoprzecinkowych oraz zastosujesz funkcje matematyczne.
Sklep, kalkulator rat, koszyk zakupowy — wszystko to wymaga liczb i obliczeń. PHP doskonale sobie z tym radzi, mając dwa typy liczbowe i bogaty zestaw operatorów.
int i float — dwa typy liczbowe
PHP rozróżnia dwa podstawowe typy liczbowe:
int— liczby całkowite (bez części ułamkowej):5,-10,0,1000float— liczby zmiennoprzecinkowe (z częścią ułamkową):3.14,19.99,-2.5
<?php
declare(strict_types=1);
$sztuki = 5; // int
$cena = 12.99; // float
$rabat = 0; // int
$stawkaVat = 0.23; // float
var_dump($sztuki); // wynik: int(5)
var_dump($cena); // wynik: float(12.99)
Operatory arytmetyczne
PHP obsługuje wszystkie podstawowe działania matematyczne:
<?php
declare(strict_types=1);
$a = 17;
$b = 5;
echo $a + $b; // wynik: 22 — dodawanie
echo $a - $b; // wynik: 12 — odejmowanie
echo $a * $b; // wynik: 85 — mnożenie
echo $a / $b; // wynik: 3.4 — dzielenie (zawsze float, gdy wynik nie jest całkowity)
echo $a % $b; // wynik: 2 — reszta z dzielenia (modulo)
echo $a ** 2; // wynik: 289 — potęgowanie (17²)
(2 + 3) * 4 = 20.Skrócone operatory przypisania
Często chcesz zmienić wartość zmiennej o jakąś liczbę. PHP ma na to skrót:
<?php
declare(strict_types=1);
$licznik = 10;
$licznik += 5; // to samo co $licznik = $licznik + 5; → 15
$licznik -= 3; // to samo co $licznik = $licznik - 3; → 12
$licznik *= 2; // to samo co $licznik = $licznik * 2; → 24
$licznik /= 4; // to samo co $licznik = $licznik / 4; → 6
$licznik++; // zwiększ o 1 → 7
$licznik--; // zmniejsz o 1 → 6
Funkcja round — zaokrąglanie
round zaokrągla liczbę do podanej liczby miejsc po przecinku:
<?php
declare(strict_types=1);
$cena = 19.9967;
echo round($cena); // wynik: 20 — zaokrągla do liczby całkowitej
echo round($cena, 2); // wynik: 20 — zaokrągla do 2 miejsc po przecinku
echo round($cena, 1); // wynik: 20 — 1 miejsce po przecinku
$innaLiczba = 14.444;
echo round($innaLiczba, 2); // wynik: 14.44
W sklepach online zawsze zaokrąglaj kwoty do 2 miejsc po przecinku — round($cena, 2).
Funkcja intdiv — dzielenie całkowite
intdiv zwraca część całkowitą z dzielenia, odrzucając resztę:
<?php
declare(strict_types=1);
$produkty = 17;
$naPolke = 5; // ile mieści się na jednej półce
$pelnePelki = intdiv($produkty, $naPolke);
$reszta = $produkty % $naPolke;
echo "Pełne półki: $pelnePelki"; // wynik: Pełne półki: 3
echo "Pozostało: $reszta"; // wynik: Pozostało: 2
Przykład z życia — kalkulator rabatu
<?php
declare(strict_types=1);
$cenaNetto = 89.90;
$vat = 0.23; // 23% VAT
$rabatProc = 10; // 10% rabatu dla stałych klientów
$cenaBrutto = round($cenaNetto * (1 + $vat), 2);
$kwotaRabatu = round($cenaBrutto * $rabatProc / 100, 2);
$cenaPoRabacie = round($cenaBrutto - $kwotaRabatu, 2);
echo "Cena netto: $cenaNetto PLN\n"; // wynik: 89.9 PLN
echo "Cena brutto: $cenaBrutto PLN\n"; // wynik: 110.58 PLN
echo "Rabat (10%): $kwotaRabatu PLN\n"; // wynik: 11.06 PLN
echo "Do zapłaty: $cenaPoRabacie PLN\n"; // wynik: 99.52 PLN
0.1 + 0.2 daje 0.30000000000000004. Zawsze zaokrąglaj kwoty pieniężne przez round() przed wyświetleniem lub zapisaniem do bazy.Funkcje w tej lekcji
Sprawdź się
Jaki typ ma wynik 10 / 3 w PHP?
Dzielenie / w PHP zawsze zwraca float, gdy wynik nie jest liczbą całkowitą. 10/3 = 3.3333...
Co zwróci 17 % 5?
Operator % to reszta z dzielenia (modulo). 17 = 3 × 5 + 2, więc reszta wynosi 2.
Co zwróci round(4.567, 2)?
round(4.567, 2) zaokrągla do 2 miejsc po przecinku. Trzecia cyfra to 7 ≥ 5, więc zaokrągla w górę: 4.57.
Co robi intdiv(17, 5)?
intdiv zwraca część całkowitą z dzielenia, odcinając resztę. 17 ÷ 5 = 3 reszty 2, intdiv zwraca 3.
Ćwiczenie
Sklep Oli ma produkt w cenie $cenaBrutto = 120.00 PLN. Klientom z kartą stałego klienta przysługuje 15% rabatu. Oblicz: cenę po rabacie, kwotę zaoszczędzoną i wyświetl obie wartości zaokrąglone do 2 miejsc po przecinku.
Pokaż rozwiązanie
<?php
declare(strict_types=1);
$cenaBrutto = 120.00;
$rabatProc = 15;
$kwotaRabatu = round($cenaBrutto * $rabatProc / 100, 2);
$cenaPoRabacie = round($cenaBrutto - $kwotaRabatu, 2);
echo "Cena po rabacie: $cenaPoRabacie PLN\n";
echo "Oszczędzasz: $kwotaRabatu PLN\n";
// wynik:
// Cena po rabacie: 102 PLN
// Oszczędzasz: 18 PLN