[PHP] Jak zaokrąglić liczbę w górę, w dół lub jak odciąć część ułamkową?
Ostatnia zmiana: 22.11.2008, Autor artykułu: Waldemar Miotk
Bardzo często podczas programowania stajemy przed dylematem zaokrąglania liczb. Potrzeby są najróżniejsze. Czasami zaokrąglamy w górę czasami w dół, czasami standardowo a czasami po prostu odcinamy część ułamkową. Może też wystąpić konieczność zaokrąglenia według zadanej dokładności. Na szczęście w PHP możemy wszystkie te rzeczy zrobić w prosty sposób korzystając z gotowych funkcji lub wykonując odpowiednie obliczenia.
W PHP znajduje się kilka funkcji zdefiniowanych do zaokrąglania liczb :
- ceil() - zaokrągla liczby ułamkowe w górę;
- floor() - zaokrągla liczby ułamkowe w dół;
- round() - zaokrągla liczby ułamkowe zgodnie z przyjętymi standardami.
Funkcja ceil() zaokrągla liczbę ułamkową w górę :
- ceil(-5.1) = -5
- ceil(5.1) = 6
- ceil(0.1) = 1
- ceil(-0.1) = 0 (co ciekawe wynik wychodzi : -0 )
- ceil(-5.94032) = -5
- ceil(5.94032) = 6
- ceil(5.5) = 6
- ceil(-5.5) = -5
Funkcja floor() zaokrągla liczby ułamkowe w dół (i wbrew pozorom nie jest to proste odcięcie części ułamkowej - patrz liczby ujemne) :
- floor(-5.1) = -6
- floor(5.1) = 5
- floor(0.1) = 0
- floor(-0.1) = -1
- floor(-5.94032) = -6
- floor(5.94032) = 5
- floor(5.5) = 5
- floor(-5.5) = -6
Funkcja round() zaokrągla liczby ułamkowe według standardowych reguł, czyli najmniej znaczącą 5 zaokrągla w górę (przy liczbach ujemnych w dół) :
- round(-5.1) = -5
- round(5.1) = 5
- round(0.1) = 0
- round(-0.1) = 0 ( tutaj również wynik wychodzi -0 )
- round(-5.94032) = -6
- round(5.94032) = 6
- round(5.5) = 6
- round(-5.5) = -6
Ponadto funkcja round() posiada dodatkową opcję oznaczającą dokładność obliczeń. Dokładność oznacza ilość miejsc po przecinku, które będą uwzględniane podczas zaokrąglania, np :
- round(5.94032, 2) = 5.94
- round(5.96549, 2) = 5.97
- round(5.99549, 2) = 6.00
- round(-5.99549, 2) = -6.00
Domyślną wartością jest 0, czyli zaokrąglanie do liczb całkowitych. Opcja dokładność ma jeszcze jedno ciekawe zastosowanie. Umożliwia zaokrąglanie liczb do pełnych dziesiątek, setek, tysięcy itd. Wystarczy wpisać jako dokładność liczbą ujemną np :
- round(593049, -1) = 593050
- round(593049, -2) = 593000
- round(593049, -3) = 593000
- round(593049, -4) = 590000
- round(593049, -5) = 600000
Istnieją też inne metody różnego rodzaju zaokrąglania liczb według potrzeb :
1. Aby odciąć część ułamkową najprościej zastosować rzutowanie typów :
- (int) 5.4939 = 5
- (int) -5.4939 = -5
2. Aby odciąć tylko część części ułamkowej stosujemy rzutowanie typów połączone z mnożeniem i dzieleniem według dokładności :
- ((int) ((5.4939 * 100))/100) = 5.49
- ((int) ((-5.4939 * 100))/100) = -5.49
- ((int) ((5.4939 * 10))/10) = 5.4
- ((int) ((-5.4939 * 10))/10) = -5.4
3. Aby zaokrąglić w dół do wartości dziesiątych, setnych itd. stosujemy metodę dzielenia modulo przy liczbach ujemnych odejmując dokładność :
- 593049 - (593049%10) = 593040
- 593049 - (593049%100) = 593000
- -593049 - (-593049%10) - 10 = -593050
- -593049 - (-593049%100) - 100 = -593100
4. Aby zaokrąglić w górę do wartości dziesiątych, setnych itd. również stosujemy metodę dzielenia modulo tym razem dodając dokładność do liczb dodatnich :
- 593049 - (593049%10) + 10 = 593050
- 593049 - (593049%100) + 100 = 593100
- -593049 - (-593049%10) = -593040
- -593049 - (-593049%100) = -593000
Można zastosować to na przykład w ten sposób :
- $liczba = 593049;
- $wynik = $liczba - $liczba%10;
- echo $wynik;
Komentarze(6)
" - IP: xxx.xxx.57.36, Data: 19.10.2024 17:04:13
proszę na pingpong
Peszko - IP: xxx.xxx.116.210, Data: 27.10.2022 13:45:57
dobry wieczór
ja - IP: xx.xxx.59.218, Data: 15.02.2022 09:01:12
dzien dobry
frajer - IP: xxx.xxx.63.214, Data: 17.01.2022 10:53:10
ale jajca
taagly.com - IP: xxx.xxx.103.1, Data: 20.10.2020 14:39:52
dzięki przydatni artykuł :-)
kupa - IP: xxx.xx.240.55, Data: 02.03.2020 08:35:11
xD