auf 2 Kommastellen runden?

  • Grüß euch!

    Hab ne kurze Frage die für die PHP-Profis kein Problem darstellen sollte!
    Wie kann ich denn eine Zahl in PHP auf 2 Kommastellen runden?

  • Falsch GreenRover,

    es wird sehrwohl kaufm. gerundet, probiere es einfach aus.
    [php:1:6e376cce52]<?php

    $wert = 3.75013068;
    echo $wert." = ";
    $wert = sprintf("%01.2f", $wert);
    echo $wert."
    ";

    $wert = 3.75913068;
    echo $wert." = ";
    $wert = sprintf("%01.2f", $wert);
    echo $wert;
    ?>[/php:1:6e376cce52]

    G.a.d.M.

    Ronald

  • Hätt aber gleich noch ne Frage!

    Hab nämlich zwei Felder für ne Berechnung;
    Wenn ich jetzt bei einem Feld irrtümlich vergess einen Wert einzugeben
    und auf Berechnen klicke, löscht er mir den bereits eingetragenen Wert raus und ich hab wieder 2 leere Felder!

    Wie kann ichs machen dass er mir den bereits eingegeben Wert behält und erst löscht wenn ich die Berechnung durchgeführt habe!?!

    Wisst ihr was ich mein?

  • Sorry, hab ich ganz vergessen!

    [php:1:b16e9d3d25]<html>
    <head>
    <title>Liter/KM</title>
    </head>

    <body>
    <form action="berechnung.php" method="post">
    <table>
    <tr>
    <td>verbrauchte Liter:</td>
    <td><input type="Text" name="liter" size="25" maxlength="100"></td>
    </tr>
    <tr>
    <td>verfahrene Kilometer:</td>
    <td><input type="Text" name="kilometer" size="25" maxlength="100"></td>
    </tr>
    </table>


    <input type="submit" value="Berechnen!">
    </form>
    <?php
    $literf = $_POST['liter'];
    $kilometerf = $_POST['kilometer'];

    if ($literf == 0)
    $liter = "";

    if ($kilometerf == 0)
    $kilometer = "";

    if($liter == "")
    {
    ?>
    <div style="color: #FF0000; position: absolute; left: 325px; top: 16px;"><?php echo "Du hast auf die Eingabe der Liter vergessen!"."
    \n";?></div>
    <?php
    if ($kilometer == "")
    {
    ?>
    <div style="color: #FF0000; position: absolute; left: 325px; top: 42px;"><?php echo "Du hast auf die Eingabe der Kilometer vergessen!"."
    \n";?></div>
    <?php
    }
    }
    elseif($kilometer == "")
    {
    ?>
    <div style="color: #FF0000; position: absolute; left: 325px; top: 42px;"><?php echo "Du hast auf die Eingabe der Kilometer vergessen!"."
    \n";?></div>
    <?php
    }
    else
    {
    $ergebnis = $liter / $kilometer;
    $ergebnis = sprintf("%01.2f", $ergebnis);
    echo "Verbrauchte Liter:"."".$liter."
    \n";
    echo "Verfahrene Kilometer:"."".$kilometer."
    \n";
    echo "Du hast durchschnittlich"."".$ergebnis."l".""."Treibstoff".""."verbraucht!";
    }


    ?>
    </body>
    </html>

    ?>[/php:1:b16e9d3d25]

  • Also ich würde es ganz anders aufbauen, schau mal:

    [php:1:4d7599eefd]<?php
    extract($_POST);
    if($submit)
    {
    !$liter ? $null_liter = "Du hast auf die Eingabe der Liter vergessen " : $null_liter = "";
    !$kilometer ? $null_kilometer = "Du hast auf die Eingabe der gefahrenen Kilometer vergessen " : $null_kilometer = "";
    if($liter && $kilometer)
    {
    $Verbrauch = sprintf("%01.2f l/100km", ($liter / $kilometer)*100);
    $Ergebnis = "Verbrauchte Liter: $liter;
    \n";
    $Ergebnis .= "Gefahrene Kilometer: $kilometer;
    \n";
    $Ergebnis .= "Dein Durchschnittsverbrauch beträgt: $Verbrauch !";
    }
    }


    echo "
    <!doctype html public '-//W3C//DTD HTML 4.01 Transitional//EN'>
    <html>
    <head>
    <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>
    <head>
    <title>Liter/KM</title>
    </head>

    <body>
    <form action='berechnung.php' method='post'>
    <table border='0' cellspacing='2' cellpadding='5'>
    <tr>
    <td>verbrauchte Liter:</td>
    <td><input type='Text' name='liter' size='25' maxlength='100'></td>
    <td style='color:#9F0000'>$null_liter</td>
    </tr>
    <tr>
    <td>gefahrene Kilometer:</td>
    <td><input type='Text' name='kilometer' size='25' maxlength='100'></td>
    <td style='color:#9F0000'>$null_kilometer</td>
    </tr>
    <tr>
    <td colspan='3'><input type='submit' name='submit' value='Berechnen!'>
    </td>
    </tr>
    </table>
    </form>
    $Ergebnis
    </body>
    </html>";
    ?>[/php:1:4d7599eefd]

    G.a.d.M.

    Ronald

  • Also bei mir nicht! Wenn ich keine Kilometer eintrage und dann auf Berechnen klicke sind die eingetragenen Liter wieder weg!

  • Stimmt, da war doch was ....

    Das hab ich jetzt ganz vergessen. Ich habe es nachgerüstet:

    So, ich hab das ganze jetzt mal in Code-Tags geschrieben, da die PHP-Tags die "&"-Zeichen immer umwandeln.
    Nun sollte es jetzt aber passen.

    G.a.d.M.

    Ronald

  • Ronald, was soll den das extract($_POST); ??

    Ich finde es imemr nicht so toll, wenn man sein wissen so weiter gibt, dam damit ja beibringt mit sicherheits löchern zu proggen. (ist hier zwar unrelawant, kann es aber später werdne bei anderen projeckten.)

    ... Aber sonst ist die Antwort gut und koreckt.

  • "extract($_POST)" weißt den Variablen die Werte noch einmal zu, das ist garantiert kein Sicherheitsloch.

    Du bekommst ja aus dem Eingabeformular für jeden Input 2 Daten:
    1. die Namen der Variablen,
    2. den Wert des Input.

    Diese Daten sind fürs PHP nicht miteiander verbunden und das Problem löst "extract($_POST)". Es macht aus dem übergebenen Variablennamen eine echte Variable, welche das Value als Wert führt.

    Ohne diese Funktion müßtest du auf die Werte der Variablen mit "$_POST['liter']" zurückgreifen. Durch "extract($_POST)" wird eine neue Variable "$liter" erzeugt, welche dann wesentlich einfacher zu händeln ist.
    Es ist im Grunde das Gleiche wie "$$liter = $liter".

    G.a.d.M.

    Ronald

  • Naja auf jeden fall verscändet es ressourecen und naja sooo viel einfacher ist es nicht, wie ich finde.

    Es ist im dem Sinner ein Sicherheitsloch, bzw kann eins werden. Damn mit dieser Mehtode, variabellen, die leichtsinnig erweiter oder einwach auch mal NULL sein können setzen kann. UNd dadurch in einer Art und weise in das Script eingrefien kann, wie es nicht vorgesehen ist. Immer auch wieder ein beliebter Weg an Adminrechte zu kommen.

  • Zitat von GreenRover

    Naja auf jeden fall verscändet es ressourecen und naja sooo viel einfacher ist es nicht, wie ich finde.


    Das kommt darauf an, wie ich die Variablen im Script weiter benutze. Bei diesem kleinen Script dürfte es egal sein, in anderen Fällen ist es schon sehr hillfreich. Ich habe Scripte laufen, da kommt die selbe Variable (benutzte Sprache des Besuchers) ~ 20-30x vor. Da finde ich es schon übersichtlicher, wenn ich kurz mit "$lang" auf die Werte zugreifen kann, anstatt mit $_POST['lang']".

    Zitat von GreenRover

    Es ist im dem Sinner ein Sicherheitsloch, bzw kann eins werden. Damn mit dieser Mehtode, variabellen, die leichtsinnig erweiter oder einwach auch mal NULL sein können setzen kann. UNd dadurch in einer Art und weise in das Script eingrefien kann, wie es nicht vorgesehen ist. Immer auch wieder ein beliebter Weg an Adminrechte zu kommen.


    Dann hat der Webmaster geschlampt - meine Scrripte kannst du alle ausprobieren, da ist nichts mit hacking. Ich habe das mit einem Array gelöst, welches sämtliche von mir verwendeten Variablen kennt und 'fremde' Variablen einfach killt. Und selbst wenn jemand versucht mir etwas über bekannte Variablen unterzujubeln, dann bekommt er nur das Formular erneut auf den Bildschirm mit dem freundlichen Hinweis, er möge seine Eingaben noch einmal überprüfen.
    Ein "Admin-Aushebeln" halte ich bei mir für ausgeschlossen.

    G.a.d.M.

    Ronald

  • Ein kleines Probelm hab ich aber noch! (Bin ja auch gemein!)
    Wenn ich jetzt mal einfach Buchstaben statt Zahlen eingebe bekomm ich die Fehlermeldung Warning: Division by zero in /home/test/htdocs/berechnung.php on line 9
    Das hat er bei meinem Script nicht gemacht!