PHP Auf nächsten Hunderter aufrunden
Lukas .
- php
2 Christian Kruse0 gustl0 Tabellenkalk0 Der Martin0 1211chef
Hallo,
wie kann ich per Einzeiler immer auf den nächsten 100er aufrunden?
Also 0.01 = 100 10 = 100 50 = 100
aber
100.01 = 200
usw.
Lukas
Hallo Lukas,
wie kann ich per Einzeiler immer auf den nächsten 100er aufrunden?
Also 0.01 = 100 10 = 100 50 = 100
aber
100.01 = 200
function round_up($number) {
return ceil($number / 100) * 100;
}
echo round_up(0.01), "\n";
echo round_up(10), "\n";
echo round_up(50), "\n";
echo round_up(100.01), "\n";
Ausgabe:
100
100
100
200
LG,
CK
Hallo,
function round_up($number) { return ceil($number / 100) * 100; } echo round_up(0.01), "\n"; echo round_up(10), "\n"; echo round_up(50), "\n"; echo round_up(100.01), "\n";
Es war nach Einzeiler gefragt, nicht Achtzeiler ;)
Beim Funktionsnamen könnte man vielleicht auf die 100 verweisen: roundUp_100() oder so.
Gruß
Kalk
Hi,
function round_up($number) { return ceil($number / 100) * 100; } echo round_up(0.01), "\n"; echo round_up(10), "\n"; echo round_up(50), "\n"; echo round_up(100.01), "\n";
Es war nach Einzeiler gefragt, nicht Achtzeiler ;)
was willst du denn - der Funktionsaufruf ist doch ein Einzeiler! :-)
Beim Funktionsnamen könnte man vielleicht auf die 100 verweisen: roundUp_100() oder so.
Ich würde noch einen Schritt weiter gehen und die Stelle, auf die ich runden möchte, als zweiten Parameter übergeben - eventuell mit einem Defaultwert von 0 für "Runden auf Einerstelle".
So long,
Martin
Hallo Martin,
Es war nach Einzeiler gefragt, nicht Achtzeiler ;)
Tschulligung, dass ich ein braver Programmierer sein wollte und Tests angefügt habe ;-)
was willst du denn - der Funktionsaufruf ist doch ein Einzeiler! :-)
Der Funktionsaufruf ist eigentlich nur eine Abstraktion wegen DRY.
Beim Funktionsnamen könnte man vielleicht auf die 100 verweisen: roundUp_100() oder so.
Ich würde noch einen Schritt weiter gehen und die Stelle, auf die ich runden möchte, als zweiten Parameter übergeben - eventuell mit einem Defaultwert von 0 für "Runden auf Einerstelle".
Das würde ich auch tun (mit Default-Wert auf den am häufigsten anzunehmenden Fall), aber der geneigte Leser muss ja auch noch etwas zu tun haben ;-)
LG,
CK
@@Der Martin
Ich würde noch einen Schritt weiter gehen und die Stelle, auf die ich runden möchte, als zweiten Parameter übergeben - eventuell mit einem Defaultwert von 0 für "Runden auf Einerstelle".
Yep. Und zwar analog zum Parameter precision
bei der round()
Funktion.
Und ich würde die Funktion auch nicht round_up
nennen, sondern bspw. ceilPrecision
:
float ceilPrecision ( float $val [, int $precision = 0 ])
.
function ceilPrecision($val, $precision = 0)
{
return ceil($val * pow(10, $precision)) / pow(10, $precision);
}
Kann es da nicht evtl. beim Potenzieren, Multiplizieren und Dividieren zu unschönen Fehlern kommen? (Dezimalsystem vs. Binärsystem) Vielleicht doch besser so?
function ceilPrecision($val, $precision = 0)
{
return round(ceil($val * pow(10, $precision)) / pow(10, $precision), $precision);
}
Aufruf:
ceilPrecision(0.01, -2); // 100
ceilPrecision(10, -2); // 100
ceilPrecision(50, -2); // 100
ceilPrecision(100.01, -2); // 200
LLAP 🖖
sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
Hi Christian,
function round_up($number) { return ceil($number / 100) * 100; } echo round_up(0.01), "\n"; echo round_up(10), "\n"; echo round_up(50), "\n"; echo round_up(100.01), "\n";
Ausgabe:
100 100 100 200
Die Lösung gefällt mir schon sehr gut (inkl. auch der von den anderen Usern nachfolgend genannten Ergänzungen).
Vielen Dank für die Hilfe.
Luk
wie kann ich per Einzeiler immer auf den nächsten 100er aufrunden?
Also 0.01 = 100 10 = 100 50 = 100
aber
100.01 = 200
hi lukas, so vielleicht?
wenn wert <= 100 dann wert = 100 oder wert = 200 die 100 könntest du variabel machen und und einer schleife je durchlauf um 100 erhöhen so hoch wie du willst.
hab ich dich richtig verstanden? gruss Gustl
Hallo,
hi lukas, so vielleicht?
wenn wert <= 100 dann wert = 100 oder wert = 200 die 100 könntest du variabel machen und und einer schleife je durchlauf um 100 erhöhen so hoch wie du willst.
Ich glaub, solche Tipps sind der Grund dafür, dass PHP son negatives Image hat (bzw. hatte?)
hab ich dich richtig verstanden?
das war ein Scherz, oder?
Gruß
Kalk
Hi,
wenn wert <= 100 dann wert = 100 oder wert = 200 die 100 könntest du variabel machen und und einer schleife je durchlauf um 100 erhöhen so hoch wie du willst.
Ich glaub, solche Tipps sind der Grund dafür, dass PHP son negatives Image hat (bzw. hatte?)
glaube ich nicht, denn das ist eine Frage des Konzepts - da kann PHP nichts dafür. Derart ungünstige bzw. in der Praxis unbrauchbare Lösungsansätze kann man auch in jeder anderen Programmiersprache anbieten.
das war ein Scherz, oder?
Ich fürchte, nein.
So long,
Martin
das war ein Scherz, oder?
Ich fürchte, nein.
ich fürchte doch