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
23
będzie, 20
a nie 30
dlatego, ż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 +5
do 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 mode
do 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 round
obsł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);