Úvod >PHP >Základy PHP >Matematika v PHP

Matematika v PHP

Souhrn matematických funkcí v PHP

Zaokrouhlování, Početní funkce, Početní funkce s BCMath, Generování náhodných čísel, Převod číselných soustav, Matematické konstanty

Zaokrouhlování

Pro zaokrouhlování je nejvhodnější použít funkci round(). Má dva parametry: prvním je číslo k zaokrouhlení, druhý, nepovinný, udává na kolik číslic po desetinné čárce se číslo zaokrouhlí. Jestliže se tento parametr nezadá, číslo se zaokrouhlí podle první číslice za desetinnou čárkou.

        
echo round(8.4); // 8
echo round(7.6); // 8
echo round(5.1234, 2); // 5.12
echo round(4321, -3); // 4000
echo round(2.456, 2); // 2.46

Další zaokrouhlovací funkcí je ceil(). Zaokrouhlí číslo vždy nahoru – na nejbližší celé číslo, které je větší nebo stejné jako číslo v parametru.

echo ceil (8.1); // 9
echo ceil (8.8); // 9
echo ceil(-8.8); // -8

Funkce floor() zaokrouhlí číslo vždy dolů – na nejbližší celé číslo, které je menší nebo stejné jako číslo v parametru. U kladných čísel to vypadá, jako by jen odstranila desetinnou část, u záporných čísel ale ne: floor(-8.3) vrátí -9.

echo floor(8.3); // 8
echo floor(8.6); // 8
echo floor(-8.3); // -9

Pokud chcete desetinnou část jen odříznout (u kladných i záporných čísel), použijte převod na celé číslo:

echo (int) 8.6; // 8
echo (int) -8.3; // -8
echo intval(-8.3); // -8

Pozn.: Desetinné číslo se odděluje tečkou

Početní funkce

sqrt(cislo) - vrátí druhou odmocninu zadaného čísla

pow(cislo1, cislo2) - vrátí číslo vzniklé umocněním základu mocniny (první parametr) mocnitelem (druhý parametr).

sin(cislo), cos(cislo), tan(cislo) - vrátí sinus, cosinus a tangens zadaného úhlu v radiánech (úhel ve stupních na radiány převede funkce deg2rad()).

asin(cislo), acos(cislo), atan(cislo) - inverzní funkce k sinu, cosinu a tangentě

fmod(cislo1, cislo2) - vrátí zbytek po dělení dvou čísel, které jsou parametrem funkce

max(pole), min(pole) - vrátí maximální a minimální hodnotu pole zadaného v parametru.

abs(cislo) - absolutní hodnota zadaného čísla

Početní funkce s knihovnou BCMath

V PHP je knihovna BCMath, jejíž používání neobsahuje rizika spojená s používáním typu float. Tato desetinná čísla se totiž používají jako řetězce a funkce této knihovny jsou matematické operace. BCMath se stará o přesnost na počet desetinných míst, které si sami zvolíte, přesnost máte vždy zaručenou protože BCMath nepracuje s floaty ale řetězci, které sám propočítává celočíselnou aritmetikou a s floatem nemá nic společného.
Funkce BCMath jsou funkce, kde první operátor je levá strana rovnice a druhý operátor je pravá strana rovnice. Jednotlivé funkce reprezentují pak matematickou operaci a výsledkem je buď string (výsledek matematické operace), nebo celé číslo -1, 0 či 1 (výsledek porovnání funkcí bccomp).
Všechny funkce mají ještě jeden nepovinný parametr – počet desetinných míst výsledku. Pozor, BCMath přebytečná místa nezaokrouhluje, ale odřízne: bcdiv('2', '3', 2) vrátí 0.66. Jestliže chceme pro všechny funkce stejný počet desetinných míst, můžeme využít funkci bcscale(), jejímž parametrem je právě tento počet.

bcadd(cislo1, cislo2) - sčítání

bcsub(cislo1, cislo2) - odčítání

bcmul(cislo1, cislo2) - násobení

bcdiv(cislo1, cislo2) - dělení

bcsqrt(cislo) - druhá odmocnina

bcpow(zaklad, exponent) - umocnění

bccomp(cislo1, cislo2) - porovnání dvou čísel (návratové hodnoty -1,0,1)

Příklady:

var_dump(0.1 + 0.2 == 0.3); // bool(false) – nepřesnost typu float
echo bcadd('0.1', '0.2', 1); // 0.3
echo bcdiv('2', '3', 2); // 0.66
echo bccomp('1.001', '1.0001', 3); // 1

Generování náhodných čísel

K vygenerování náhodného čísla poslouží funkce rand(0,100); kde 0 = Minimální náhodné číslo! a 100 = Nejvyšší možné náhodné číslo! (Pozor: rand() bez parametrů vrací čísla od 0 do getrandmax(). Ve starších verzích PHP to na Windows bylo jen 32767, od PHP 7.1 je rand() jen jiným názvem pro mt_rand() a rozsah je všude stejný. Pro hesla, tokeny a jiné bezpečnostní účely používejte random_int().)

mt_rand(0, mt_getrandmax () ) = Generuje velmi vysoká čísla

Převod číselných soustav

decOct(číslo) - převod z desítkové do osmičkové

decHex(číslo) - převod z desítkové do šestnáctkové

decBin(číslo) - převod z desítkové do dvojkové

octDec(číslo) - převod z osmičkové do desítkové

hexDec(číslo) - převod z šestnáctkové do desítkové

binDec(číslo) - převod z dvojkové do desítkové

bin2hex(retezec) - pozor, nepřevádí dvojková čísla: každý bajt (znak) řetězce vypíše jako dvě šestnáctkové číslice. Hodí se například pro zápis náhodných bajtů – bin2hex(random_bytes(16)) vytvoří náhodný řetězec o 32 znacích.

Flexibilnější je použít funkci base_convert(cislo, soustava1, soustava2) kde cislo je číslo které chceme převádět, soustava1 je soustava z které chceme převádět a soustava2 je soustava do které chceme převádět.

Příklady:

echo decbin(10); // 1010
echo bindec('1010'); // 10
echo dechex(255); // ff
echo hexdec('ff'); // 255
echo decoct(8); // 10
echo base_convert('1010', 2, 16); // a
echo base_convert('ff', 16, 2); // 11111111
echo bin2hex('abc'); // 616263
echo bin2hex('1010'); // 31303130

Matematické konstanty

Konstanta Hodnota Popis
M_PI 3.14159265358979323846 Pí
M_E 2.7182818284590452354 e
M_LOG2E 1.4426950408889634074 log_2 e
M_LOG10E 0.43429448190325182765 log_10 e
M_LN2 0.69314718055994530942 log_e 2
M_LN10 2.30258509299404568402 log_e 10
M_PI_2 1.57079632679489661923 pi/2
M_PI_4 0.78539816339744830962 pi/4
M_1_PI 0.31830988618379067154 1/pi
M_2_PI 0.63661977236758134308 2/pi
M_SQRTPI 1.77245385090551602729 sqrt(pi) [4.0.2]
M_2_SQRTPI 1.12837916709551257390 2/sqrt(pi)
M_SQRT2 1.41421356237309504880 sqrt(2)
M_SQRT3 1.73205080756887729352 sqrt(3) [4.0.2]
M_SQRT1_2 0.70710678118654752440 1/sqrt(2)
M_LNPI 1.14472988584940017414 log_e(pi) [4.0.2]
M_EULER 0.57721566490153286061 Eulerova konstanta [4.0.2]