Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Matematické funkcie v PHP

PHP je známe svojou veľkou zásobou funkcií. A nájdeme tu samozrejme aj matematické funkcie. Dnes si predstavíme tie najdôležitejších a najpoužívanejších z nich.

Round, ceil, floor

Niekedy nám pri výpočtoch vyjdú čísla ako 3,185643854. A nie vždy potrebujeme takto presné číslo alebo dokonca vôbec jeho desatinnú časť. A na to tu máme 3 funkcie.

Round

Klasické zaokrúhľovania, ktoré poznáme zo školských lavíc. "Čo je pod polovicu zaokrúhlime nadol, čo je nad alebo rovný polovici tak hore". Druhým parametrom sa dá aj určiť presnosť, tzn. na koľko desatinných miest budete zaokrúhľovať.

Príklad:

round(5); // 5
round(5.1); // 5
round(5.4); // 5
round(5.5); // 6
round(5.8); // 6
round(5483.47621, 2); // 5483.47
round(5483.47621, -2); // 5500

U funkcie round je aj tretí parameter, kde môžete nastaviť mód. Tu sa dá nastaviť "deliacou hodnota", tzn. číslica 5, či sa zaokrúhli nahor alebo nadol. Pre podrobnejšie pochopenie týchto módov si odporúčam prečítať oficiálny dokumentáciu a alebo si jednoducho chvíľu skúšať a hrať sa s tým. Tu je jednoduchá tabuľka ukazujúca rozdiely medzi týmito módy. Defaultná hodnota pre PHP je PHP_ROUND_HALF_UP.

číslo round PHP_ROUND_HALF_UP PHP_ROUND_HALF_DOWN PHP_ROUND_HALF_EVEN PHP_ROUND_HALF_ODD
5 5 5 5 5 5
5.1 5 5 5 5 5
5.2 5 5 5 5 5
5.3 5 5 5 5 5
5.4 5 5 5 5 5
5.5 6 6 5 6 5
5.6 6 6 6 6 6
5.7 6 6 6 6 6
5.8 6 6 6 6 6
5.9 6 6 6 6 6
6 6 6 6 6 6
číslo round PHP_ROUND_HALF_UP PHP_ROUND_HALF_DOWN PHP_ROUND_HALF_EVEN PHP_ROUND_HALF_ODD
-5 -5 -5 -5 -5 -5
-5.1 -5 -5 -5 -5 -5
-5.2 -5 -5 -5 -5 -5
-5.3 -5 -5 -5 -5 -5
-5.4 -5 -5 -5 -5 -5
-5.5 -6 -6 -5 -6 -5
-5.6 -6 -6 -6 -6 -6
-5.7 -6 -6 -6 -6 -6
-5.8 -6 -6 -6 -6 -6
-5.9 -6 -6 -6 -6 -6
-6 -6 -6 -6 -6 -6
Dôležité je tiež upozorniť ako PHP spracováva rôzne formáty čísel. Kompilátor nerieši dátový typ (vezme ako string tak float), avšak problematická môže byť desatinná čiarka vs. desatinná bodka. Tento problém možno vyriešiť funkcií number_format (ktorý si podrobne popíšeme u práce sa stringy).

Príklad:

echo round("4,8"). "<br />"; // 4, jelikož kompilátor to usekne pouze na číslici 4
echo round("4.8"). "<br />"; // 5, kompilátor je schopen převést datový typ
echo round(4,8). "<br />";   // 4
echo round(4.8). "<br />";   // 5

Ceil a floor

Tieto funkcie vám vždy zaokrúhli desatinné číslo rovnakým smerom, bez ohľadu či je v hornej alebo spodnej polovici. Ceil zaokrúhľuje vždy hore, floor dole. Nie je tu bohužiaľ parameter na presnosť, preto to ide iba len na jednotky.

Príklad:

ceil(4.2); // 5
ceil(4.5); // 5
ceil(4.7); // 5
floor(4.2); // 4
floor(4.5); // 4
floor(4.7); // 4

Tu môžete aj vidieť porovnanie týchto 3 funkcií v tabuľke.

číslo round ceil floor číslo round ceil floor
5 5 5 5 -5 -5 -5 -5
5.1 5 6 5 -5.1 -5 -5 -6
5.2 5 6 5 -5.2 -5 -5 -6
5.3 5 6 5 -5.3 -5 -5 -6
5.4 5 6 5 -5.4 -5 -5 -6
5.5 6 6 5 -5.5 -6 -5 -6
5.6 6 6 5 -5.6 -6 -5 -6
5.7 6 6 5 -5.7 -6 -5 -6
5.8 6 6 5 -5.8 -6 -5 -6
5.9 6 6 5 -5.9 -6 -5 -6
6 6 6 5 -6 -6 -5 -6
Goniometrické funkcie

Väčšina z nás pozná 4 goniometrické funkcie: sínus, kosínus, tangens, cotagens. PHP má však funkcií s goniometrie rovnou 12. Tu je ich ukážka: sin, asin, sinh, ASINH. Dôležité je pre začiatok spomenúť, že parameter je v radiánoch. Ak by ste chceli zadávať uhol, musíte použiť funkciu deg2rad.

  • sin = klasický sinus
  • asin = arkus sínus (inverzná funkcia k sinus, možno poznáte z kalkulačiek ako sin -1)
  • sinh = hyperbolický sínus
  • ASINH = Inverzný hyperbolický sínus. (Spojenie tých dvoch)
Hyberbolické sínus v praxi ale asi len tak nepoužijete, trvalo nám dlho zistiť o čo sa vlastne jedná. Funkcia by mala fungovať rovnako ako sínus, ale hodnoty nie sú na jednotkovej kružnici, ale na jednotkovej hyperbole.

Rovnaké zastúpenie má aj cosinová funkcie (cos, ACOS, cosh, acosh) a tangens (tan, atan, TANH, ATANH). Naviac je však tu funkcia ATAN2, kde počíta s dvoma hodnotami a je to ako by sme počítali arkus tangens y / xs tým rozdielom, že funkcia podľa znamienok vyberie kvadrant. Verím ale že tieto funkcie naozaj len tak nevyužívate a klasický sínus, kosínus, tagens vám bude stačiť. Mimochodom, ak ste to v škole zaspali, Cotangens možno urobiť ako 1 / tan (x).

Príklad

echo sin(30); // -0.98803162409286
echo sin(deg2rad(30)); // 0.5
echo cos(deg2rad(123)); // -0.54463903501503
echo 1/tan(deg2rad(45)); // 1 (onen cotangens)
echo sin(deg2rad(500)); // 0.64278760968654
echo atan2(deg2rad(50), deg2rad(23)); // 1.1396575860761

Deg2rad a rad2deg

Spomínaný prevod medzi radiány a stupňami.

Príklad:

echo deg2rad(45); //0.785398163
echo rad2deg(0.401425728); //23

Prevod sústav

V PHP je niekoľko funkcií na prevod medzi rôznymi sústavami. Ukážme si príklady:

Príklad:

echo decoct(24); // 30 (z desítkové do osmičkové)
echo dechex(24); // 18 (z desítkové do šestnáctkové)
echo decbin(24); // 11000 (z desítkové do dvojkové)
echo bindec(101110); // 46 (z dvojkové do desítkové)
echo octdec(24); // 20 (z osmičkové do desítkové)
echo hexdec(24); // 36 (z šestnáctkové do osmičkové)

Ovšem stačí si zapamätať len jednu funkciu a to base_convert, ktorú prevediete z ľubovoľnej sústavy do ďalšej ľubovoľné. Trebárs aj trojkového:

echo base_convert("2AF36", 16, 3); //22221022210 (z šestnáctkové do trojkové)

Kontrola typu čísla

V PHP ide jednoducho podľa určitých funkcií zistiť či je číslo konečné, nekonečné alebo neznáme vďaka funkciám is_finite, is_infinite, a is_nan. Používajú s často v podmienkach, ich návratová hodnota boolean.

is_finite ukazuje či je číslo konečné.

Príklad

var_dump(is_finite(log(0))); //false
var_dump(is_finite(10/0)); //ERROR
var_dump(is_finite(6)); //true
var_dump(is_finite(9223372036854775807)); //true (PHP_INT_MAX)
var_dump(is_finite(9223372036854775807+1)); //true
var_dump(is_finite(8.5070591730235E+37)); //true
  • is_infinite vracia či je číslo nekonečné (možno nahradiť za! is_finite ())
  • is_nan kontroluje či sa nejedná o neznámu hodnotu

Príklad

var_dump(is_nan(acos(30))); //true
var_dump(is_nan(48)); //false
var_dump(is_nan(10/0)); //ERROR

Ďalšie dôležité matematické funkcie

  • abs (x) = vracia absolútnu hodnotu
  • exp (x) = exponencioální funkcie
  • expm1 (x) = je definovaný ako exp (x) -1. Opäť nejaká zvláštna matematická funkcia
  • FMOD (x, y) = vracia desatinná zvyšok po delení x / y
  • sprevádza (x, y) = výpočet prepony u pravouhlého trojuholníka (Pytagorova veta)
  • log (x, y) = logaritmus xo základe y. Ak nezadáte základ, je defaultný hodnota konštanta M_E -> 2.718281828459)
  • log10 (x) = logaritmus o základe 10
  • log1p (x) = logaritmus (1 + x)
  • min (x) a max (x) = nájde minimálne alebo maximálnu hodnotu z poľa čísel.
  • rand (x, y), mt_rand (x, y) = funkcie generovanie čísel (mt_rand má vylepšený algoritmus)
  • pow (x, y) = mocnina x na y
  • sqrt (x) = vracia druhú odmocninu x

Statické funkcie

  • getrandmax = vracia maximálnu hodnotu funkcie rand ();
  • pi = vracia 3.1415926535898, rovnaké ako konštanta M_PI

Konštanty

PHP má aj preddefinované vlastné konštanty, a dosť je ich aj v PHP. Tu je výpis niekoľkých hlavných:

Názov hodnota popis
M_PI 3.14159265358­979323846 π
M_PI 2 1.57079632679­489661923 π / 2
M_PI 4 0.78539816339­744830962 π / 4
M 1 _PI 0.31830988618­379067154 1 / π
M 2 _PI 0.63661977236­758134308 2 / π
M_SQRTPI 1.77245385090­551602729 odmocnina z π
M 2 _SQRTPI 1.12837916709­551257390 2 / odmocnina z π
M_LNPI 1.14472988584­940017414 log_e (π)
M_SQRT2 1.41421356237­309504880 odmocnina z 2
M_SQRT3 1.73205080756­887729352 odmocnina z 3
M_SQRT1_2 0.70710678118­654752440 1 / odmocnina z 2
M_EULER 0.57721566490­153286061 Eulerova konštanta
To je všetko ohľadom matematiky a práca s číslami v PHP. Ako sami ste si všimli, veľa funkcií je zbytočná a nahradzujú niekedy len pomaly 2 - 3 riadky kódu. Preto si zapamätajte len tie najdôležitejšie funkcie a konštanty. Keď sa naopak dostanete do situácie, že niekde potrebujete spočítať niečo veľmi rýchlo, je dobrý nápad sa pozrieť po zvláštnych funkciách, pretože sú napísané v céčku a v PHP výpočty ťažko urobíme tak rýchlo (napr. Spomínanú Pytagorovu vetu).

Tu ešte raz je najdôležitejšie výpis funkcií:

  • round, ceil, floor
  • sin, cos, tan
  • base_convert, deg2rad, rad2deg
  • abs, log, mt_rand, pow, sqrt, FMOD
  • min, max

 

Všetky články v sekcii
Ostatné tutoriály v PHP
Článok pre vás napísal Snorlax
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Studuji jednu nejmenovanou pražskou střední školu - obor IT a rozhodl jsem se vám sdělit co to obnáší. Mladí se mohou rozhodnout zda je to dobrá cesta a ti co to už mají za sebou si mohou zavzpomínat popř. zjistit co se změnilo
Aktivity