Wie runde ich eine Zahl auf die nächsten 10 auf?


99

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?


51
Äh, das sind nicht die nächsten 10?
Rowland Shaw

1
ok, dann runde auf 1 signifikante Zahl auf! haha
tarnfeld

3
Um fair zu sein, in dem Titel, heißt es „rund bis eine Zahl nächste 10“, auch wenn der Text sagt „runde“ ... Ich bin ziemlich sicher , dass er fragt immer rund bis zum nächsten 10.
Aaron Wallentine

Antworten:


218

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.


4
Die Antwort von TallGreenTree rundet es nicht immer ab. Diese Antwort ist die richtigste mit der Verwendung von Ceil ()
Brandon

1
Die Antwort von TallGreenTree unterstützt das Auf- und Abrunden mit dem dritten Parameter (Modus) von round (). Runde ($ Eingabe, -1, PHP_ROUND_HALF_UP)
Daren Schwenke

4
@DarenSchwenke, dieser dritte Parameter funktioniert nicht ganz so, wie Sie annehmen, er steuert nur den Fall genau in der Mitte zwischen den Intervallen. (15,-1, PHP_ROUND_HALF_UP); // 20,(14,-1, PHP_ROUND_HALF_UP); // 10
Arth

168
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


11
Können Sie ihnen die Schuld geben, dass der Fragesteller "auf die nächste 10 runden" meinte, wenn die Frage zweimal "auf die nächste 10 runden" lautete?
Ceejayoz

Diese Antwort wurde veröffentlicht, bevor sich der Fragesteller klarstellte. Ich dachte nur, dass er in der Frage nicht richtig rundet.
TallGreenTree

12
TallGreenTree ist korrekt. Sie können den Rundungsmodus mit dem dritten Argument festlegen: "Modus Eins von PHP_ROUND_HALF_UP, PHP_ROUND_HALF_DOWN, PHP_ROUND_HALF_EVEN oder PHP_ROUND_HALF_ODD."
d -_- b

13
Dies führt nicht zum richtigen Ergebnis. 23wird sein 20und nicht, 30weil es immer auf die nächste 10 rondiert. Der Rundungsmodus wird nicht helfen, da diese nur runde Hälfte nach dem x..
Timo002

1
Schade, dass Ceil () und Floor () noch nicht den Präzisionsparameter haben.
squarecandy

15

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

Kenny, du bist der Beste. Ich wünschte nur, ich hätte eine grafische Darstellung, wie es genau rundet, also bin ich sicher, dass es in 100% der Fälle die erwarteten Ergebnisse liefert. Ich denke, ich muss ein paar Tests machen.
Alph.Dev

Gibt es eine Möglichkeit, diesen Code zu ändern, um einen dritten Parameter im Rundungsmodus HALF_UP / HALF_DOWN hinzuzufügen?
Alph.Dev

12

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 +5Ihre 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 modezum Aufrunden verwenden, da dies nur Brüche und keine ganzen Zahlen aufrundet.

Wenn Sie auf den nächsten 100aufrunden möchten , sollten Sie verwenden +50.


Dies funktioniert nicht bei Nicht-Dezimalzahlen. 10 wird 20
Luciano



2

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 roundjetzt "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;    
}

Hallo, das funktioniert perfekt - für diese Frage, wie kann ich aufrunden? also 23 bis 30?
Tarnfeld

2
$value = 23;
$rounded_value = $value - ($value % 10 - 10);
//$rounded_value is now 30


0

Mein erster Impuls war, nach "PHP-Mathematik" zu googeln, und ich entdeckte, dass es eine Kernfunktion der Mathematikbibliothek namens "round ()" gibt, die wahrscheinlich genau das ist, was Sie wollen.


0

Für Leute, die es mit Raw SQL machen wollen, ohne PHP, Java, Python usw. zu verwenden. SET SQL_SAFE_UPDATES = 0; UPDATE db.table SET value=ceil(value/10)*10 where value not like '%0';


0

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;
}

0
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

0

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


0

bis zur nächsten 10 sollte wie folgt sein

$number = ceil($input * 0.1)/0.1 ;

-2

Versuchen Sie dies ...... geben Sie die abzurundende Zahl ein und es wird auf das nächste Zehntel gerundet. Hoffentlich hilft es ....

rund ($ num, 1);

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.