główna strona
wróć
[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
artykul-0013.jpg

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 :

  1. ceil() - zaokrągla liczby ułamkowe w górę;
  2. floor() - zaokrągla liczby ułamkowe w dół;
  3. 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 :

  1. $liczba = 593049;
  2. $wynik = $liczba - $liczba%10;
  3. echo $wynik;
     
Komentarze(1)

Podpis:
W celu potwierdzenia, zaznacz pole pod znakiem: V
Capcha
g - IP: xxx.xx.108.244, Data: 28.01.2018 15:48:52
y
(c)2007-2016 Waldemar Miotk - ostatnia aktualizacja silnika 06.02.2016 - Twój IP: 54.221.147.93. Ta strona, aby lepiej działać, używa plików cookie przechowywanych na komputerach użytkowników. Wszystkie prawa do tekstów zamieszczonych na stronie są zastrzeżone, chyba że przy konkretnym tekście znajduje się inna informacja.
go up