PHP'de Nasıl Küsüratlı Sayı Yuvarlarım
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
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (1)
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.