Wie können wir eine Zahl auf die nächsten 10 in PHP abrunden?
Angenommen, ich habe 23
, welchen Code würde ich verwenden, um ihn abzurunden 30
?
Wie können wir eine Zahl auf die nächsten 10 in PHP abrunden?
Angenommen, ich habe 23
, welchen Code würde ich verwenden, um ihn abzurunden 30
?
Antworten:
floor()
Wird untergehen.
ceil()
wird steigen.
round()
wird standardmäßig zum nächsten gehen.
Teilen Sie durch 10, machen Sie die Obergrenze und multiplizieren Sie dann mit 10, um die signifikanten Stellen zu reduzieren.
$number = ceil($input / 10) * 10;
Edit: Ich mache das schon so lange so .. aber die Antwort von TallGreenTree ist sauberer.
(15,-1, PHP_ROUND_HALF_UP); // 20
,(14,-1, PHP_ROUND_HALF_UP); // 10
round($number, -1);
Dadurch wird die $ -Zahl auf die nächste 10 gerundet. Sie können bei Bedarf auch eine dritte Variable übergeben, um den Rundungsmodus zu ändern.
Weitere Informationen hier: http://php.net/manual/en/function.round.php
23
wird sein 20
und nicht, 30
weil es immer auf die nächste 10 rondiert. Der Rundungsmodus wird nicht helfen, da diese nur runde Hälfte nach dem x.
.
Ich suchte tatsächlich nach einer Funktion, die auf die nächste Variable gerundet werden konnte, und diese Seite tauchte bei meinen Suchen immer wieder auf. Als ich die Funktion schließlich selbst schrieb, dachte ich, ich würde sie hier veröffentlichen, damit andere sie finden können.
Die Funktion wird auf die nächste Variable gerundet:
function roundToTheNearestAnything($value, $roundTo)
{
$mod = $value%$roundTo;
return $value+($mod<($roundTo/2)?-$mod:$roundTo-$mod);
}
Dieser Code:
echo roundToTheNearestAnything(1234, 10).'<br>';
echo roundToTheNearestAnything(1234, 5).'<br>';
echo roundToTheNearestAnything(1234, 15).'<br>';
echo roundToTheNearestAnything(1234, 167).'<br>';
Wird ausgegeben:
1230
1235
1230
1169
Es gibt viele Antworten in dieser Frage, wahrscheinlich geben Ihnen alle die Antwort, die Sie suchen. Aber wie @TallGreenTree erwähnt, gibt es dafür eine Funktion.
Das Problem bei der Antwort von @TallGreenTree ist jedoch, dass es nicht aufrundet, sondern auf die nächste 10 aufrundet. Um dies zu lösen, addieren Sie +5
Ihre Zahl , um aufzurunden . Wenn Sie abrunden möchten, tun Sie dies -5
.
Also im Code:
round($num + 5, -1);
Sie können das nicht round mode
zum Aufrunden verwenden, da dies nur Brüche und keine ganzen Zahlen aufrundet.
Wenn Sie auf den nächsten 100
aufrunden möchten , sollten Sie verwenden +50
.
Div durch 10, dann Ceil, dann Mult durch 10
Versuchen
round(23, -1);
Wir können per Runde mit "schummeln"
$rounded = round($roundee / 10) * 10;
Wir können auch vermeiden, mit Gleitkommadivision zu gehen
function roundToTen($roundee)
{
$r = $roundee % 10;
return ($r <= 5) : $roundee - $r : $roundee + (10 - $r);
}
Bearbeiten: Ich wusste nicht (und es ist auf der Website nicht gut dokumentiert), dass es round
jetzt "negative" Präzision unterstützt, sodass Sie es einfacher verwenden können
$round = round($roundee, -1);
Erneut bearbeiten: Wenn Sie immer aufrunden möchten, können Sie es versuchen
function roundUpToTen($roundee)
{
$r = $roundee % 10;
if ($r == 0)
return $roundee;
return $roundee + 10 - $r;
}
Ich wollte auf die nächste Zahl an der Stelle mit den größten Ziffern aufrunden (gibt es einen Namen dafür?), Also habe ich die folgende Funktion (in PHP) gemacht:
//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
Dies kann leicht mit der PHP -Funktion ' fmod ' erreicht werden. Der folgende Code ist spezifisch für 10, Sie können ihn jedoch in eine beliebige Zahl ändern.
$num=97;
$r=fmod($num,10);
$r=10-$r;
$r=$num+$r;
return $r;
AUSGABE: 100
Versuchen Sie dies ...... geben Sie die abzurundende Zahl ein und es wird auf das nächste Zehntel gerundet. Hoffentlich hilft es ....
rund ($ num, 1);