ziddi: Nachkommastellen...

Also ich wollte mal fragen ob jemand weiß wie ich die variable abfrage ,ob mehr als zwei nachkommastellen vorhanden sind und dann wenn es so ist auf 2 nachkommastellen rundet?
danke im vorraus,
zid

  1. Hallo Zid,

    hier ein Codeschnipsel von http://www.php.net/manual/en/function.sprintf.php

    $zahl = 68.7578;
    $formatted = sprintf("%01.2f", $zahl);

    Gruß vom Horst

    1. Hallo Zid,

      hier ein Codeschnipsel von http://www.php.net/manual/en/function.sprintf.php

      $zahl = 68.7578;
      $formatted = sprintf("%01.2f", $zahl);

      Gruß vom Horst

      das hilft mir aber nicht viel :(
      naja ich brauch ungefähr so was in der art if($ergebnis [hat mehr als 2 nachkommastellen]= [runden]) kann mir da jemand helfen?

      1. Hi Zid...

        vielleicht hilft dir das ja.. verstehe noch nicht so ganz was
        Du machen möchtest:
        <?php
        $zahl = .333;
        if(ereg(".[0-9]{3,}$", $zahl)){
          echo "Zahl $zahl hat mehr als 2 Nachkommastellen<br>\n";
          $zahl = sprintf("%01.2f", $zahl);
        }

        echo $zahl;

        ?>

        Gruß vom Horst

        1. Hi Zid...

          vielleicht hilft dir das ja.. verstehe noch nicht so ganz was
          Du machen möchtest:
          <?php
          $zahl = .333;
          if(ereg(".[0-9]{3,}$", $zahl)){
            echo "Zahl $zahl hat mehr als 2 Nachkommastellen<br>\n";
            $zahl = sprintf("%01.2f", $zahl);
          }

          echo $zahl;

          ?>

          Gruß vom Horst

          ja ich meine halt das er halt nur runden soll wenn mehr als 2 nachkommastellen vorhanden sind soll er runden frag lieber nicht aber es muss halt so sein

          1. Hi Zid...

            <?php
            $zahl = .333;
            if(ereg(".[0-9]{3,}$", $zahl)){
              echo "Zahl $zahl hat mehr als 2 Nachkommastellen<br>\n";
              $zahl = sprintf("%01.2f", $zahl);
            }

            echo $zahl;

            ?>

            dieses Skript prüft, ob es mehr als Zwei Nachkommastellen gibt..
            und rundet nur dann...

            Gruss vom Horst

            1. Hi Zid...

              <?php
              $zahl = .333;
              if(ereg(".[0-9]{3,}$", $zahl)){
                echo "Zahl $zahl hat mehr als 2 Nachkommastellen<br>\n";
                $zahl = sprintf("%01.2f", $zahl);
              }

              echo $zahl;

              ?>

              dieses Skript prüft, ob es mehr als Zwei Nachkommastellen gibt..
              und rundet nur dann...

              Gruss vom Horst

              naja da stimmt was nicht mit $zahl = .333;  weil er dann sofort denkt das das ergebnis 0.333 wär
              also er soll ja überprüfen ob mehr als 2 nachkommastellen vorhanden wenn ja soll er runden wenn nicht nicht aber dann soll er auch keine 2 nachkommstellen (nullen) anzeigen

              1. <?php
                $array = array(3.0, 3.00, 3.980, 3.543,.33);
                foreach ($array as $zahl){
                if(ereg(".[0-9]{3,}$", $zahl)){
                  echo "Zahl $zahl hat mehr als 2 Nachkommastellen<br>\n";
                  $zahl = sprintf("%01.2f", $zahl);
                }
                else{
                  echo "Zahl $zahl hat nicht mehr als 2 Nachkommastellen<br>\n";
                }

                echo $zahl."<br>";
                }

                ?>

                bei welchen Zahlen macht denn das obige Skript nicht was Du willst???

                1. <?php
                  $array = array(3.0, 3.00, 3.980, 3.543,.33);
                  foreach ($array as $zahl){
                  if(ereg(".[0-9]{3,}$", $zahl)){
                    echo "Zahl $zahl hat mehr als 2 Nachkommastellen<br>\n";
                    $zahl = sprintf("%01.2f", $zahl);
                  }
                  else{
                    echo "Zahl $zahl hat nicht mehr als 2 Nachkommastellen<br>\n";
                  }

                  echo $zahl."<br>";
                  }

                  ?>

                  bei welchen Zahlen macht denn das obige Skript nicht was Du willst???

                  schon o ich brauch jetzt noch nen anderen tip nämlich hab ich das problem das er in der eingabe keine kommas erkennt nur die . aber ich möchte ja das er die kommas erkennt deswgen hab ich das hier gemacht:

                  if ($feld1 == "," ) {
                      echo str_replace (",",".",$feld1);
                  }
                  if (feld2 ==  "," ) {
                      echo str_replace (",",".",$feld2);
                  }

                  naja es klappt aber nicht. :( Ist da was falsch dran oder hab ich was vergessen?
                  mfg
                  zid

                  1. hi

                    da du es anscheinend nicht gelesen/ verstanden hast,
                    hier der Code

                    $feld1 = str_replace (",",".",$feld1);
                    $feld2 = str_replace (",",".",$feld2);

                    $feld1 = number_format($feld1, 2);
                    $feld2 = number_format($feld2, 2);

                    gruß vom horst

                    1. hi

                      da du es anscheinend nicht gelesen/ verstanden hast,
                      hier der Code

                      $feld1 = str_replace (",",".",$feld1);
                      $feld2 = str_replace (",",".",$feld2);

                      $feld1 = number_format($feld1, 2);
                      $feld2 = number_format($feld2, 2);

                      gruß vom horst

                      oh nein nächster fehler wenn diesen code umdrehe um das ergebnis halt auch mit , auszuwerten rundet er nicht mehr???

                      1. <html>
                        <head>
                        <title>Taschenrechner</title>
                        </head>
                        <body>
                        <form name="taschenrechner" method="post" action="test.php">
                          <input name="zahl1" type="text" id="zahl1">
                          <select name="opt" id="opt">
                            <option value="+">+</option>
                            <option value="-">-</option>
                            <option value=":">/</option>
                            <option value="*">*</option>
                          </select>
                          <input name="zahl2" type="text" id="zahl2">
                          <input type="submit" name="Submit" value="Abschicken">
                        </form>
                        <?php
                        $zahl1 = $_POST["zahl1"];
                        $zahl2 = $_POST["zahl2"];
                        $opt   = $_POST["opt"];

                        $zahl1 = str_replace (",",".",$zahl1);
                        $zahl2 = str_replace (",",".",$zahl2);

                        if(!is_numeric($zahl1) || !is_numeric($zahl2)){
                         echo "Bitte geben Sie die Zahlen korrekt an!";
                        }
                        else{
                          switch ($opt) {
                            case "+":
                                $ergebnis = $zahl1 + $zahl2;
                                break;
                            case "-":
                                $ergebnis = $zahl1 - $zahl2;
                                break;
                            case ":":
                               $ergebnis = $zahl1 / $zahl2;
                               break;
                            case "* ":
                               $ergebnis = $zahl1 * $zahl2;
                               break;
                          }
                          echo" $zahl1 $opt $zahl2 = <b>$ergebnis</b><br>";
                          echo str_replace (".",",",$ergebnis)."<br>";
                          if(ereg(".[0-9]{3,}$", $ergebnis)) {
                            echo number_format($ergebnis,2);
                          }
                        }
                        ?>
                        </body>
                        </html>

      2. Hallo ziddi,

        naja ich brauch ungefähr so was in der art if($ergebnis [hat mehr als 2 nachkommastellen]= [runden]) kann mir da jemand helfen?

        warum muss es so sein? runde doch einfach immer, dann werden die mit weniger als 2 Nachkommastellen halt auch gerundet (ich würde das mit round($zahl,2) machen), aber wenn du unbedingt wills, bitte:
        $t = explode($zahl);
        $if(strlen($t[1])>2) round($zahl,2);
        aber ungetestet :-)

        Grüße aus Nürnberg
        Tobias