Menu

PHP round(), floor() ve ceil(): Yuvarlama ve Matematik

round($x, 2) iki ondalık basamağa yuvarlar, floor() her zaman aşağı, ceil() her zaman yukarı yuvarlar. Ayrıca intdiv(), % operatörü, kuvvet için **, abs(), max(), min() ve rastgele sayılar için random_int().

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

round($x) en yakın tam sayıya yuvarlar, floor($x) her zaman aşağı, ceil($x) her zaman yukarı yuvarlar. Ondalık basamaklar için round() fonksiyonuna ikinci bir argüman verin: round(3.14159, 2) sonucu 3.14 olur.

Üçü de değer tam olsa bile bir float döndürür. var_dump(round(5)) float(5) yazdırır, bu yüzden bir tam sayıya ihtiyacınız olduğunda (int) ile dönüştürün.

2 ondalık basamağa yuvarlamak

round() fonksiyonunun ikinci argümanı hassasiyettir. Pozitif bir sayı o kadar ondalık basamağa yuvarlar. Negatif bir sayı ise ondalık noktanın soluna yuvarlar; "yaklaşık 1.200 ziyaretçi" gibi kaba rakamlar için kullanışlıdır.

round(3.10, 2) 3.1 yazdırır, çünkü bir float kaç sıfır istediğinizi bilemez. Sayı bir sayfada gösterilecekse (fiyatlar, yüzdeler) onu biçimlendirin: number_format(), number_format(3.1, 2) ile 3.1 değerini "3.10" yapar, sprintf('%.2f', $x) de aynı işi yapar.

Yarımı yukarı, aşağı veya çifte yuvarlamak

Varsayılan olarak round() yarımı sıfırdan uzağa yuvarlar; çoğumuzun okulda öğrendiği yuvarlama budur. Üçüncü argüman, iki sayının tam ortasındaki değerler için farklı bir kural seçer.

PHP_ROUND_HALF_EVEN "bankacı yuvarlamasıdır": yarımlar en yakın çift sayıya gider, böylece çok sayıda değeri yuvarlamak zamanla yukarı doğru kaymaz. Muhasebe kodu çoğu zaman bunu ister.

Negatif sayılarla floor ve ceil

floor() eksi sonsuza, ceil() artı sonsuza doğru gider. Negatif sayılarda bu insanları şaşırtır: floor(-3.5) sonucu -3 değil -4 olur. Ondalıkları sıfıra doğru kesmek istiyorsanız bunun yerine int'e dönüştürün.

Sayfalama satırı ceil() fonksiyonunun klasik kullanımıdır: artan tek bir eleman bile bir sayfa gerektirir.

Tam sayı bölmesi ve mod

/ bölme tam değilse bir float döndürür, bu yüzden 7 / 2 sonucu 3.5 olur. Tam sayı bölmesi için kalanı atan intdiv(), kalanın kendisi için % kullanın.

% önce iki işleneni de tam sayıya çevirir, bu yüzden 7.5 % 2 sonucu 1 olur ve PHP 8.1'den beri ayrıca Deprecated: Implicit conversion from float 7.5 to int loses precision yazdırır. Ondalıklar önemliyse fmod() kullanın. PHP 8'de /, intdiv() veya % ile sıfıra bölmek bir DivisionByZeroError fırlatır; bu yüzden bölen girdiden geliyorsa önce onu kontrol edin.

Kuvvetler, kökler, abs, max ve min

** kuvvet alır (pow() da aynı işi yapar), sqrt() karekök alır, abs() ise işareti kaldırır. max() ve min() ya birkaç argüman ya da tek bir dizi alır.

** sağdan sola değerlendirilir, bu yüzden 2 ** 3 ** 2 ifadesi 2 ** 9 demektir. max(0, min(100, $x)) çifti, bir değeri bir alt ve bir üst sınır arasında tutmanın olağan yoludur. Daireler için ihtiyacınız olursa M_PI pi sayısını tutar.

random_int ve rand ile rastgele sayılar

random_int($min, $max) iki uç dahil rastgele bir tam sayı döndürür. Çıktı her çalıştırmada değişir, bu yüzden Run'a birkaç kez basın.

Güvenlikle ilgili her şey için random_int() kullanın: giriş kodları, token'lar, parola sıfırlama bağlantıları. rand() ve mt_rand() hâlâ çalışır ve aynı ($min, $max) argümanlarını kabul eder, ama dizileri tahmin edilebilir. Güvenli bir kaynakla karıştırma ve seçme için PHP 8.2 Random\Randomizer sınıfını ekledi ($r->getInt(1, 6), $r->shuffleArray($a)).

floor() neden bazen yanlış yanıt verir

Float'lar ikili sistemde saklanır ve birçok ondalık değer (0.1 gibi) tam olarak saklanamaz. Çoğu zaman yazdırma bunu gizler, ama floor() ve (int) yuvarlamaz, keser; 7.999999999 gibi bir değer 7 olur.

Para gibi kesin ondalıklara ihtiyacınız olduğunda tam birimleri saklayın (kuruşları tam sayı olarak: 19.99 yerine 1999) ve yalnızca gösterirken bölün. Son satırdaki gibi floor() veya ceil() öncesinde makul bir hassasiyete yuvarlamak da çoğu durumu çözer.

Sıkça Sorulan Sorular

PHP'de 2 ondalık basamağa nasıl yuvarlarım?

Ondalık sayısını ikinci argüman olarak geçirin: round(3.14159, 2) 3.14 döndürür. Bir float döndürür; bu yüzden sabit sayıda ondalıkla göstermek için (3.1 yerine 3.10) number_format($x, 2) veya sprintf('%.2f', $x) kullanın.

PHP'de aşağı nasıl yuvarlarım?

floor($x) bir alttaki tam sayıya yuvarlar: floor(4.9) sonucu 4, floor(-4.1) sonucu -5 olur. Bunun yerine ondalıkları sıfıra doğru atmak için (int) $x ile dönüştürün; bu -4.9 değerini -4 yapar.

PHP'de round() neden float döndürüyor?

round(), floor() ve ceil() sonuç tam sayı olsa bile her zaman bir float döndürür: var_dump(round(5)) float(5) yazdırır. Bir tam sayıya ihtiyacınız olduğunda, örneğin bir dizi indeksi olarak, çağrıyı (int) veya intval() içine alın.

PHP'de rand() ile random_int() arasındaki fark nedir?

random_int(1, 6) kriptografik olarak güvenli bir kaynak kullanır ve token'lar, kodlar ve bir kullanıcının tahmin etmeye çalışabileceği her şey için kullanılması gereken odur. rand() ve mt_rand() daha hızlıdır ama tahmin edilebilir. Üçü de aralığın iki ucunu da dahil eder.

PHP'de bir bölmenin kalanını nasıl alırım?

Tam sayılar için % operatörünü kullanın: 17 % 5 sonucu 2 olur. Sonuç sol işlenenin işaretini alır, bu yüzden -7 % 3 sonucu -1 olur. Float'lar için 1.5 döndüren fmod(7.5, 2) kullanın.

Coddy programlama dilleri çizimi

Coddy ile kodlamayı öğren

BAŞLA