v2.5.2
Giriş yap

PHP'de Nasıl Küsüratlı Sayı Yuvarlarım

spleidanger
440 defa görüntülendi

Herkese merhaba iyi çalışmalar
Örnek veriyorum kullanıcıdan gelen sayı 1.2 ben bunu direkt 1.5'e yuvarlamak istiyorum nasıl yapabilirim ceil() gibi fonksiyonları kullanırsam küsüratsız direkt 2'ye yuvarlıyor

ebykdrms
774 gün önce

Aşağıdaki örneklerden kendinize uygun olanı seçebilirsiniz.

En yakına yuvarla: round()
https://www.php.net/manual/en/function.round.php

round(3.4);      // 3
round(3.5);      // 4
round(3.6);      // 4
round(3.6, 0);   // 4
round(5.045, 2); // 5.05
round(5.055, 2); // 5.06
round(345, -2);  // 300
round(345, -3);  // 0
round(678, -2);  // 700
round(678, -3);  // 1000
round( 1.55, 1, PHP_ROUND_HALF_UP); // 1.6
round(-1.55, 1, PHP_ROUND_HALF_UP); // -1.6
round( 1.55, 1, PHP_ROUND_HALF_DOWN); // 1.5
round(-1.55, 1, PHP_ROUND_HALF_DOWN); // -1.5
round( 1.55, 1, PHP_ROUND_HALF_EVEN); // 1.6
round(-1.55, 1, PHP_ROUND_HALF_EVEN); // -1.6
round( 1.55, 1, PHP_ROUND_HALF_ODD); // 1.5
round(-1.55, 1, PHP_ROUND_HALF_ODD); // -1.5

round()'un 3.parametresindeki sabitler:
PHP_ROUND_HALF_UP : Sayıyı 0'dan uzaklaştırarak yuvarlar.
PHP_ROUND_HALF_DOWN : Sayıyı 0'a yaklaştırarak yuvarlar.
PHP_ROUND_HALF_EVEN : Sayıyı en yakın çift sayıya yaklaştırarak yuvarlar.
PHP_ROUND_HALF_ODD : Sayıyı en yakın tek sayıya yaklaştırarak yuvarlar.

Yukarı yuvarla: ceil()
https://www.php.net/manual/en/function.ceil.php

ceil(4.3);    // 5
ceil(9.999);  // 10
ceil(-3.14);  // -3

Aşağı yuvarla: floor()
https://www.php.net/manual/en/function.floor.php

floor(4.3);   // 4
floor(9.999); // 9
floor(-3.14); // -4

Siz, sayının kendisinden büyük ilk tam veya buçuklu sayıya yuvarlanmasını istiyorsunuz.
Yani 1.2 ise, kendisinden büyük ilk tam veya buçuklu sayı olan 1.5'e yuvarlansın.
Yani 1.7 ise, kendisinden büyük ilk tam veya buçuklu sayı olan 2.0'a yuvarlansın.
Bunun için özel bir fonksiyon oluşturmanız gerekecek. Şöyle bir fonksiyon yazdım:

function roundUpHalfOrInt($num) {
    if(!is_numeric($num)) throw new Exception('Parameter of roundUpHalfOrInt() is not numeric!');
    $num = (float)$num;
    $numStr = (string)$num;
    $numArr = explode(".", $numStr);
    if(count($numArr)<2) return (float)$num;
    $numFloatSide = (int)((string)$numArr[1])[0];
    if($numFloatSide===0) return (float)$num;
    if($numFloatSide < 5) return (float)($numArr[0].".5");
    return (float)($numArr[0]+1);
}

Bu fonksiyona sayısal değeri verirseniz bahsettiğiniz şekilde yukarı yuvarlama yapacaktır.