ok, w takim razie zaokrąglij do 1 cyfry znaczącej! haha
tarnfeld
3
Aby być uczciwym, w tytule, to mówi „runda się szeregu do najbliższego 10”, mimo że tekst mówi „zaokrąglenie” ... Jestem pewien, że prosi, aby zawsze okrągły w górę do najbliższego 10.
Odpowiedź TallGreenTree nie zawsze ją zaokrągla. Ta odpowiedź jest najbardziej poprawna przy użyciu ceil ()
Brandon
1
Odpowiedź TallGreenTree obsługuje zaokrąglanie w górę / w dół przy użyciu trzeciego parametru (trybu) funkcji round (). round ($ input, -1, PHP_ROUND_HALF_UP)
Daren Schwenke
4
@DarenSchwenke, ten trzeci parametr nie działa tak, jak zakładasz, kontroluje tylko wielkość liter dokładnie w połowie między interwałami. (15,-1, PHP_ROUND_HALF_UP); // 20,(14,-1, PHP_ROUND_HALF_UP); // 10
Arth
168
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.
Czy możesz ich winić za założenie, że pytający miał na myśli „zaokrąglenie do najbliższej 10”, kiedy pytanie brzmiało dwukrotnie „zaokrąglenie do najbliższej 10”?
ceejayoz
Ta odpowiedź została opublikowana, zanim pytający sam się wyjaśnił. Po prostu pomyślałem, że nie zaokrąglił poprawnie w pytaniu.
Will Barrett
12
TallGreenTree jest poprawne. Możesz ustawić tryb zaokrąglania za pomocą trzeciego argumentu: "tryb Jeden z PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN lub PHP_ROUND_HALF_ODD."
d -_- b
13
To nie daje właściwego wyniku. 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..
Timo002
1
Szkoda, że ceil () i floor () nie mają jeszcze parametru precyzji.
squarecandy
15
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);}
Kenny, jesteś najlepszy. Żałuję tylko, że nie mam graficznej reprezentacji tego, jak dokładnie się zaokrągla, więc jestem pewien, że daje oczekiwane wyniki w 100% przypadków. Chyba będę musiał zrobić kilka testów.
Alph. Dev
Czy istnieje sposób na zmodyfikowanie tego kodu, aby dodać trzeci parametr z trybem rundy HALF_UP / HALF_DOWN?
Alph. Dev
12
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.
Moim pierwszym impulsem było wyszukanie w Google „php math” i odkryłem, że istnieje podstawowa funkcja biblioteki matematycznej o nazwie „round ()”, która prawdopodobnie jest tym, czego chcesz.
Dla osób, które chcą to zrobić za pomocą surowego SQL, bez korzystania z php, java, python itp.
SET SQL_SAFE_UPDATES = 0;
UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';
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 graphfunction 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 functionfunction 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
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.
Edycja: Robię to w ten sposób od tak dawna ... ale odpowiedź TallGreenTree jest czystsza.
źródło
(15,-1, PHP_ROUND_HALF_UP); // 20
,(14,-1, PHP_ROUND_HALF_UP); // 10
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
źródło
23
będzie,20
a nie30
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 pox.
.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:
Ten kod:
Wyświetli:
źródło
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:
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
.źródło
div przez 10, a następnie ceil, a następnie mult przez 10
http://php.net/manual/en/function.ceil.php
źródło
Próbować
round(23, -1);
źródło
Możemy "oszukiwać" przez rundę z
Możemy również uniknąć dzielenia zmiennoprzecinkowego za pomocą
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ćEdytuj ponownie: jeśli zawsze chcesz zaokrąglić w górę, możesz spróbować
źródło
źródło
Spróbuj tego:
źródło
Moim pierwszym impulsem było wyszukanie w Google „php math” i odkryłem, że istnieje podstawowa funkcja biblioteki matematycznej o nazwie „round ()”, która prawdopodobnie jest tym, czego chcesz.
źródło
Dla osób, które chcą to zrobić za pomocą surowego SQL, bez korzystania z php, java, python itp.
SET SQL_SAFE_UPDATES = 0; UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';
źródło
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):
źródło
źródło
Można to łatwo osiągnąć za pomocą funkcji PHP „ fmod ”. Poniższy kod jest specyficzny dla 10, ale możesz go zmienić na dowolną liczbę.
WYJŚCIE: 100
źródło
do najbliższej 10, powinno być jak poniżej
źródło
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);
źródło