Jak możemy zaokrąglić liczbę do najbliższej 10 w php?
Powiedz, że mam 23, jakiego kodu użyłbym, aby to zaokrąglić 30?
Jak możemy zaokrąglić liczbę do najbliższej 10 w php?
Powiedz, że mam 23, jakiego kodu użyłbym, aby to zaokrąglić 30?
Odpowiedzi:
floor() spadnie.
ceil() pójdzie w górę.
round() domyślnie trafi do najbliższego.
Podzielić przez 10, obliczyć pułap, a następnie pomnożyć przez 10, aby zredukować cyfry znaczące.
$number = ceil($input / 10) * 10;
Edycja: Robię to w ten sposób od tak dawna ... ale odpowiedź TallGreenTree jest czystsza.
(15,-1, PHP_ROUND_HALF_UP); // 20,(14,-1, PHP_ROUND_HALF_UP); // 10
round($number, -1);
Spowoduje to zaokrąglenie liczby $ do najbliższej 10. W razie potrzeby możesz również przekazać trzecią zmienną, aby zmienić tryb zaokrąglania.
Więcej informacji tutaj: http://php.net/manual/en/function.round.php
23będzie, 20a nie 30dlatego, że zawsze będzie zbliżał się do najbliższych 10. Tryb zaokrąglania nie pomoże, ponieważ to tylko zaokrąglenie połowy po x..
Właściwie szukałem funkcji, która mogłaby zaokrąglić do najbliższej zmiennej i ta strona wciąż pojawiała się w moich wyszukiwaniach. Kiedy w końcu sam napisałem tę funkcję, pomyślałem, że opublikuję ją tutaj, aby inni mogli ją znaleźć.
Funkcja zaokrągli do najbliższej zmiennej:
function roundToTheNearestAnything($value, $roundTo)
{
$mod = $value%$roundTo;
return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
}
Ten kod:
echo roundToTheNearestAnything(1234, 10).'<br>';
echo roundToTheNearestAnything(1234, 5).'<br>';
echo roundToTheNearestAnything(1234, 15).'<br>';
echo roundToTheNearestAnything(1234, 167).'<br>';
Wyświetli:
1230
1235
1230
1169
Odpowiedzi na to pytanie jest wiele, prawdopodobnie wszystkie dadzą odpowiedź, której szukasz. Ale jak wspomina @TallGreenTree, jest do tego funkcja.
Ale problem z odpowiedzią @TallGreenTree polega na tym, że nie zaokrągla ona w górę, lecz zaokrągla do najbliższych 10. Aby rozwiązać ten problem, dodaj +5do swojej liczby, aby zaokrąglić w górę. Jeśli chcesz zaokrąglić w dół, zrób -5.
Więc w kodzie:
round($num + 5, -1);
Nie możesz użyć round modedo zaokrąglania w górę, ponieważ zaokrągla to tylko ułamki, a nie liczby całkowite.
Jeśli chcesz zaokrąglić w górę do najbliższej 100, powinieneś użyć +50.
div przez 10, a następnie ceil, a następnie mult przez 10
Próbować
round(23, -1);
Możemy "oszukiwać" przez rundę z
$rounded = round($roundee / 10) * 10;
Możemy również uniknąć dzielenia zmiennoprzecinkowego za pomocą
function roundToTen($roundee)
{
$r = $roundee % 10;
return ($r <= 5) : $roundee - $r : $roundee + (10 - $r);
}
Edycja: nie wiedziałem (i nie jest to dobrze udokumentowane w witrynie), który roundobsługuje teraz „ujemną” precyzję, więc możesz łatwiej używać
$round = round($roundee, -1);
Edytuj ponownie: jeśli zawsze chcesz zaokrąglić w górę, możesz spróbować
function roundUpToTen($roundee)
{
$r = $roundee % 10;
if ($r == 0)
return $roundee;
return $roundee + 10 - $r;
}
Chciałem zaokrąglić w górę do następnej liczby w miejscu największej cyfry (czy jest na to nazwa?), Więc utworzyłem następującą funkcję (w php):
//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
Spróbuj tego ...... podaj liczbę do zaokrąglenia, a zostanie ona zaokrąglona do najbliższej dziesiątej. Mam nadzieję, że to pomoże ....
round ($ num, 1);