Bir sayıyı php'de en yakın 10'a nasıl yuvarlayabiliriz?
Diyelim ki 23
, onu tamamlamak için hangi kodu kullanmalıyım 30
?
Bir sayıyı php'de en yakın 10'a nasıl yuvarlayabiliriz?
Diyelim ki 23
, onu tamamlamak için hangi kodu kullanmalıyım 30
?
Yanıtlar:
floor()
Aşağı inecek.
ceil()
yukarı çıkacak.
round()
varsayılan olarak en yakına gidecek.
10'a bölün, tavanı yapın, ardından önemli basamakları azaltmak için 10 ile çarpın.
$number = ceil($input / 10) * 10;
Düzenleme: Uzun zamandır bu şekilde yapıyorum .. ama TallGreenTree'nin cevabı daha temiz.
(15,-1, PHP_ROUND_HALF_UP); // 20
,(14,-1, PHP_ROUND_HALF_UP); // 10
round($number, -1);
Bu, $ sayıyı en yakın 10'a yuvarlar. Ayrıca gerekirse yuvarlama modunu değiştirmek için üçüncü bir değişken de iletebilirsiniz.
Daha fazla bilgi burada: http://php.net/manual/en/function.round.php
23
olacaktır 20
ve 30
her zaman en yakın 10'a rondlayacağı için değildir. Yuvarlama kipi yardımcı olmayacaktır, çünkü bu sadece yarım yuvarlak, sonra x.
.
Aslında en yakın değişkene yuvarlayabilecek bir fonksiyon arıyordum ve bu sayfa aramalarımda çıkmaya devam etti. Sonunda işlevi kendim yazmayı bıraktığımda, başkalarının bulması için buraya göndereceğimi düşündüm.
İşlev en yakın değişkene yuvarlanacaktır:
function roundToTheNearestAnything($value, $roundTo)
{
$mod = $value%$roundTo;
return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
}
Bu kod:
echo roundToTheNearestAnything(1234, 10).'<br>';
echo roundToTheNearestAnything(1234, 5).'<br>';
echo roundToTheNearestAnything(1234, 15).'<br>';
echo roundToTheNearestAnything(1234, 167).'<br>';
Çıktı:
1230
1235
1230
1169
Bu soruda birçok cevap var, muhtemelen hepsi size aradığınız cevabı verecektir. Ancak @TallGreenTree'nin bahsettiği gibi, bunun için bir işlev var.
Ancak @TallGreenTree'nin cevabının sorunu, yuvarlanmaması, en yakın 10'a yuvarlanmasıdır. Bunu çözmek +5
için, yuvarlamak için numaranıza ekleyin . Aşağı yuvarlamak istiyorsanız, yapın -5
.
Yani kodda:
round($num + 5, -1);
round mode
Yuvarlama için kullanamazsınız , çünkü bu sadece kesirleri yuvarlar, tam sayıları değil.
En 100
yakınına yuvarlamak istiyorsan , kullanmalısın +50
.
10'a böl, sonra ceil'i kullan sonra 10'a mult
Deneyin
round(23, -1);
Tur ile "hile" yapabiliriz
$rounded = round($roundee / 10) * 10;
Ayrıca kayan nokta bölümünden geçmekten de kaçınabiliriz
function roundToTen($roundee)
{
$r = $roundee % 10;
return ($r <= 5) : $roundee - $r : $roundee + (10 - $r);
}
Düzenleme: Artık round
"negatif" hassasiyeti desteklediğini bilmiyordum (ve sitede iyi belgelenmedi) , böylece daha kolay kullanabilirsiniz
$round = round($roundee, -1);
Tekrar düzenleyin: Her zaman yukarı yuvarlamak isterseniz, deneyebilirsiniz
function roundUpToTen($roundee)
{
$r = $roundee % 10;
if ($r == 0)
return $roundee;
return $roundee + 10 - $r;
}
En büyük basamaklı bir sonraki sayıya yuvarlamak istedim (bunun için bir isim var mı?), Bu yüzden aşağıdaki işlevi (php cinsinden) yaptım:
//Get the max value to use in a graph scale axis,
//given the max value in the graph
function getMaxScale($maxVal) {
$maxInt = ceil($maxVal);
$numDigits = strlen((string)$maxInt)-1; //this makes 2150->3000 instead of 10000
$dividend = pow(10,$numDigits);
$maxScale= ceil($maxInt/ $dividend) * $dividend;
return $maxScale;
}
Hey i modify Kenny answer and custom it not always round function now it can be ceil and floor function
function roundToTheNearestAnything($value, $roundTo,$type='round')
{
$mod = $value%$roundTo;
if($type=='round'){
return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
}elseif($type=='floor'){
return $value+($mod<($roundTo/2)?-$mod:-$mod);
}elseif($type=='ceil'){
return $value+($mod<($roundTo/2)?$roundTo-$mod:$roundTo-$mod);
}
}
echo roundToTheNearestAnything(1872,25,'floor'); // 1850<br>
echo roundToTheNearestAnything(1872,25,'ceil'); // 1875<br>
echo roundToTheNearestAnything(1872,25,'round'); // 1875
Bunu deneyin ...... yuvarlanacak sayıyı geçirin ve en yakın onda birine yuvarlanacaktır. Umarım yardımcı olur ....
round ($ num, 1);