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, 1000
  • float — 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²)
💡 Kolejność działań: PHP respektuje matematyczną kolejność działań: najpierw mnożenie i dzielenie, potem dodawanie i odejmowanie. Używaj nawiasów, żeby wymusić własną kolejność: (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
⚠️ Precyzja float: Liczby zmiennoprzecinkowe mogą mieć drobne błędy zaokrągleń, np. 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?

Co zwróci 17 % 5?

Co zwróci round(4.567, 2)?

Co robi intdiv(17, 5)?

Ć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