Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

Zahlen in PHP aufrunden

Sie befinden sich: Home > Php Tutorial > Zahlen in PHP aufrunden

Zahlen in PHP aufrunden


Eintrag am:  12.09.2009
Hits / Besucher:  7431
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Beim Programmieren stößt man immer wieder auf Situationen, in denen eine Zahl aufgerundet werden muss. PHP stellt dafür die Funktion ceil() bereit, die eine Fließkommazahl auf die nächste ganze Zahl aufrundet. Dieses Tutorial zeigt dir, wie ceil() funktioniert, welche Stolperfallen es gibt und wann du besser zu floor() oder round() greifst.

So funktioniert ceil()

Die Funktion erwartet einen numerischen Wert und gibt die nächsthöhere Ganzzahl zurück. Falls der Wert bereits ganzzahlig ist, bleibt er unverändert.

<?php

echo ceil(4.3); // 5
echo ceil(9.999); // 10
echo ceil(5.0); // 5
echo ceil(-3.7); // -3
?>

Bei negativen Zahlen rundet ceil() in Richtung Null. Aus -3.7 wird also -3, nicht -4. Das ist ein häufiger Stolperstein, den man im Hinterkopf behalten sollte.

ceil() im Vergleich zu floor() und round()

PHP bietet neben ceil() noch zwei weitere Rundungsfunktionen. Welche die richtige ist, hängt vom Anwendungsfall ab.

graph LR
    A["4.3"] -->|"ceil()"| B["5"]
    A -->|"floor()"| C["4"]
    A -->|"round()"| D["4"]
    E["4.7"] -->|"ceil()"| F["5"]
    E -->|"floor()"| G["4"]
    E -->|"round()"| H["5"]
<?php

$zahl = 4.5;
echo ceil($zahl); // 5 (aufrunden)
echo floor($zahl); // 4 (abrunden)
echo round($zahl); // 5 (kaufm. runden)

$zahl2 = 4.4;
echo round($zahl2); // 4
echo ceil($zahl2); // 5
?>

floor() rundet immer ab, round() rundet kaufmännisch (ab 0.5 aufgerundet). ceil() rundet dagegen immer auf, egal wie klein der Nachkommaanteil ist.

Vorsicht bei Fließkomma-Ungenauigkeiten

Fließkommazahlen werden intern als Binärwerte gespeichert, und manche Dezimalwerte lassen sich nicht exakt abbilden. Das kann zu unerwarteten Ergebnissen bei ceil() führen.

<?php

$ergebnis = (0.7 + 0.1) * 10;
echo $ergebnis; // 7.9999999999...
echo ceil($ergebnis); // 8

/*
* Man erwartet 8.0, aber intern ist
* der Wert 7.9999... Deshalb rundet
* ceil() auf 8, was zufaellig stimmt.
*/

$ergebnis2 = (0.1 + 0.2) * 10;
echo $ergebnis2; // 3.0000000000...
echo ceil($ergebnis2); // 4 (!)
?>

Die Lösung: Runde den Wert vorher mit round() auf eine sinnvolle Genauigkeit, bevor du ceil() anwendest.

<?php

$wert = (0.1 + 0.2) * 10;

/* Vorher auf 10 Stellen runden */
echo ceil(round($wert, 10)); // 3
?>

Praxisbeispiel: Seitenanzahl berechnen

Ein typischer Einsatz von ceil() ist die Berechnung der Seitenanzahl bei einer Pagination. Wenn du 47 Einträge hast und pro Seite 10 anzeigst, brauchst du 5 Seiten.

<?php

$eintraege = 47;
$pro_seite = 10;

$seiten = ceil($eintraege / $pro_seite);
echo "Seitenanzahl: $seiten"; // 5
?>

Ohne ceil() würde 47 / 10 den Wert 4.7 ergeben. Mit normalem Type-Casting oder floor() ginge der letzte Rest verloren. ceil() stellt sicher, dass auch die restlichen 7 Einträge eine eigene Seite bekommen.

Praxisbeispiel: Versandkosten berechnen

Ein weiterer klassischer Einsatz ist die Berechnung von Versandkosten nach Gewichtsstufen. Pakete werden pro angefangenes Kilogramm berechnet, und genau dafür ist ceil() gemacht.

<?php

function berechneVersand(float $gewichtKg): float
{
$preisProKg = 2.50;
$grundgebuehr = 4.99;

/*
* Jedes angefangene Kilogramm
* wird voll berechnet
*/
$stufen = ceil($gewichtKg);

return $grundgebuehr + ($stufen * $preisProKg);
}

echo berechneVersand(2.3);
/* 4.99 + (3 * 2.50) = 12.49 */

echo berechneVersand(1.0);
/* 4.99 + (1 * 2.50) = 7.49 */
?>

Ein Paket mit 2,3 kg wird auf 3 Stufen aufgerundet. So zahlst du für jedes angefangene Kilogramm den vollen Preis. Dasselbe Prinzip funktioniert bei Stundenabrechnungen, Speicherplatz-Kontingenten oder Lizenzmodellen.

Vorsicht bei Kommazahlen als String

In deutschsprachigen Ländern wird als Dezimaltrennzeichen ein Komma verwendet, PHP erwartet aber einen Punkt. Das kann zu überraschenden Ergebnissen führen.

<?php

$mit_punkt = "4.3";
echo ceil($mit_punkt); // 5

$mit_komma = "4,3";
echo ceil($mit_komma); // 4 (!)
?>

Der String "4,3" wird von PHP als 4 interpretiert, weil das Komma den numerischen Teil abschneidet. Wenn Benutzereingaben mit Komma ankommen können, solltest du vorher str_replace(",", ".", $eingabe) verwenden.

<?php

$eingabe = "4,3";
$bereinigt = str_replace(",", ".", $eingabe);

if (is_numeric($bereinigt)) {
echo ceil((float) $bereinigt); // 5
} else {
echo "Keine gültige Zahl.";
}
?>

Mit is_numeric() prüfst du zusätzlich, ob der bereinigte Wert tatsächlich eine Zahl ist, bevor du ihn an ceil() übergibst.

Verwandte Tutorials

Diese Tutorials ergänzen das Thema Rundung in PHP:

 

Tags:

 

Kommentare (0)

Noch keine Kommentare. Sei der Erste!

Melde dich an, um einen Kommentar zu schreiben.
Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.