Suse: IF nachkommastelle

Hallo,

ich möchte gerne eine IF Abfrage machen die Prüft ob die nachkomma (bzw. nach Punkt) Stellen maximal 2 betragen.

12.33 IF schleife läuft
12.454 IF schleife läuft nicht

Welche PHP Funktion kann ich da nutzen?

Danke Suse

  1. Die Funktion Explode z.B.

    $zahl = 123.456;  
    $split_zahl = explode(".", $zahl);  
      
    if($split_zahl[1] >= 10 && $split_zahl[1] <= 99) {  
    [...]  
    }
    

    Ka wie es bei dir mit 1 Nachkommastelle aussieht, deswegen die 10. Falls die Nachkommastelle nicht größer als 2 sein darf, würde die Bedingung <= 99 völlig reichen.

    1. Die Funktion Explode z.B.

      $zahl = 123.456;

      $split_zahl = explode(".", $zahl);

      if($split_zahl[1] >= 10 && $split_zahl[1] <= 99) {
      [...]
      }

      
      >   
      > Ka wie es bei dir mit 1 Nachkommastelle aussieht, deswegen die 10. Falls die Nachkommastelle nicht größer als 2 sein darf, würde die Bedingung <= 99 völlig reichen.  
        
      Was ist mit 1.01?  
        
      Außerdem soll die Bedingung maximal zwei Nachkommastellen sein und nicht nicht maximal zwei Nachkommastellen.  
      also:  
      ~~~php
      if (isset($split_zahl[1]) && ($split_zahl[1] > 99)) {  
        
      }
      
      1. Außerdem soll die Bedingung maximal zwei Nachkommastellen sein und nicht nicht maximal zwei Nachkommastellen.
        also:

        if (isset($split_zahl[1]) && ($split_zahl[1] > 99)) {

        }

          
        Ich habe mich vertan die Bedingung war doch so rum. Eine Bedingung (neben der ggf. Nicht-Existenz) reicht aber dennoch aus.  
          
        ~~~php
        if (!isset($split_zahl[1]) OR ($split_zahl[1] <= 99)) {  
          
        }
        
      2. Ka wie es bei dir mit 1 Nachkommastelle aussieht, deswegen die 10. Falls die Nachkommastelle nicht größer als 2 sein darf, würde die Bedingung <= 99 völlig reichen.

        Was ist mit 1.01?

        Hat sich auch erledigt, ich bin jatzt auf Betriebstemperatur.

  2. Hello,

    ich möchte gerne eine IF Abfrage machen die Prüft ob die nachkomma (bzw. nach Punkt) Stellen maximal 2 betragen.

    12.33 IF schleife läuft
    12.454 IF schleife läuft nicht

    "IF" leitet keine Schleife ein, sondern eine Entscheidungsstruktur.

    Du müsstest aus der Zahl einen String machen, diesen dann am Punkt splitten und dann die Länge des Strings bestimmen.

    also:     $strzahl = strval($zahl);

    if (strpos($strzahl, '.') !== false)
              {
                  $rightstr = strstr($strzahl, '.');
                  $declen = strlen($rightstr)-1;
              }
              else
              {
                  $declen = 0;
              }

    http://de2.php.net/manual/en/function.strval.php
    http://de2.php.net/manual/en/function.strstr.php
    http://de2.php.net/manual/en/function.strpos.php

    Das ist nur ein Beispiel. Es gibt auch andere Lösungswege...

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  3. Hi!

    ich möchte gerne eine IF Abfrage machen die Prüft ob die nachkomma (bzw. nach Punkt) Stellen maximal 2 betragen.
    12.33 IF schleife läuft
    12.454 IF schleife läuft nicht

    Unabhängig von der Frage, ob es eine if-Schleife gibt oder nicht ...

    Welche PHP Funktion kann ich da nutzen?

    ... substr_count() in Verbindung mit strpos(). Gegebenenfalls willst du den Fall, dass kein Punkt enthalten ist, gesondert abfragen, denn dann liefert strpos() als Ergebnis ein false, was man leicht mit 0 verwechseln kann. Hängt auch davon ab, ob du Zahlen mit . an nullter Stelle erwartest oder nicht.

    Lo!

    1. Hi!

      ... substr_count() in Verbindung mit strpos(). [...]

      Ach, Quark. substr_count() macht was ganz anderes. Dann doch eher: strlen(), substr() und strpos().

      Lo!

  4. ... und noch eine Möglichkeit:

    if (intval($zahl*100) == $zahl*100) echo 'zwei oder weniger Nachkommastellen';  
    else echo 'mehr als zwei Nachkommastellen';
    
    1. Danke das war sehr hilfreich

    2. Moin!

      if (intval($zahl100) == $zahl100) echo 'zwei oder weniger Nachkommastellen';

      else echo 'mehr als zwei Nachkommastellen';

        
      Das Problem, wenn man float-Zahlen mit Multiplikation bearbeitet: Das kann unerwartete Ergebnisse liefern, weil die binäre Darstellung eventuell Rundungsfehler aufweist und deshalb zu falschen Ergebnissen führt.  
        
      Die korrekte Behandlung von Nachkommastellen führt man am besten mit Strings durch - da passiert sowas nicht.  
        
       - Sven Rautenberg