kostenloser Webspace werbefrei: lima-city


Brauche hilfe bei Überprüfung auf Dezimalbruch... [PHP]

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    samael

    samael hat kostenlosen Webspace.

    Hey...


    ich muss unbedingt wissen wie ich in php überprüfen kann, ob der wert einer variable eine dezimalzahl ist...

    im prinzip bräucht ich folgenden code:

    if($preis == dezimalzahl)
    {
        $preis = $preis."0";
    }



    kann mir einer von euch da weiter helfen?

    danke :D

    gruß
    chris.samael
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. sandrock-jonas

    Kostenloser Webspace von sandrock-jonas

    sandrock-jonas hat kostenlosen Webspace.

    Willst du überprüfen, ob die Zahl eine Kommazahl ist oder ob es eine Ganzzahl ist?

    Für Ganzzahlen:
    http://www.selfphp.de/funktionsreferenz/variablen_funktionen/is_int.php

    Für Kommazahlen:
    http://www.selfphp.de/funktionsreferenz/variablen_funktionen/is_float.php
    und
    http://www.selfphp.de/funktionsreferenz/variablen_funktionen/is_double.php
  4. Autor dieses Themas

    samael

    samael hat kostenlosen Webspace.

    leider sagt er mir, wenn ich es überprüfe, das 199 eine Kommazahl ist...

    mein code:

    if(is_float($price))
    		{
    			echo "$price ist eine Dezimalzahl";
    		}
    		elseif(is_int($price))
    		{
    			echo "$price ist keine Dezimalzahl";
    		}


    ist da irgendwas falsch dran?
  5. sandrock-jonas

    Kostenloser Webspace von sandrock-jonas

    sandrock-jonas hat kostenlosen Webspace.

    Also bei mir funktioniert das:

    $price = 199;
    
    if(is_float($price)) {
      echo $price . ' ist eine Dezimalzahl';
    } elseif (is_int($price)) {
      echo $price . ' ist keine Dezimalzahl';
    }


    Das gibt
    "199 ist keine Dezimalzahl"
    zurück. Und so sollte es auch sein. Wie liest du denn die Variable $price ein?
  6. c*********c

    [..]
    ist da irgendwas falsch dran?


    Aus syntaktischer Sicht: nein

    Es macht allerdings den Anschein, dass PHP den Unterschied zwischen Float und Integer nicht wirklich beachtet. Um mehr zu diesem Mysterium zu erfahren, könnte [1] evtl. eine erste Anlaufstelle sein.

    Zum Problem: Überprüfe zuerst, ob die Zahl eine Ganzzahl (= Integer) ist.


    [1] http://de.php.net/manual/de/language.types.type-juggling.php

  7. compactdisc schrieb:
    [..]
    ist da irgendwas falsch dran?


    Aus syntaktischer Sicht: nein

    Es macht allerdings den Anschein, dass PHP den Unterschied zwischen Float und Integer nicht wirklich beachtet. Um mehr zu diesem Mysterium zu erfahren, könnte [1] evtl. eine erste Anlaufstelle sein.

    Zum Problem: Überprüfe zuerst, ob die Zahl eine Ganzzahl (= Integer) ist.


    [1] http://de.php.net/manual/de/language.types.type-juggling.php



    seh ich genau so!
    Ich würd es in dem Fall mit Regulären Ausdrücken machen und zwar so:
    <?php
      if(ereg("[0-9]+(.|,)[0-9]+",$_POST['input']))
       {
       echo "Float!\n";
       }
      elseif(ereg("[0-9]+",$_POST['input']))
       {
       echo "Integer!\n";
       }
      else
       {
       echo "String!\n";
       }
    ?>


    Falls wen intressiert wieso... also ich glaub das ist deshalb weil solche Funktionen immer mit <input>'s und Formularen verwendet werden und die Rückgabe werten aus Formularen, auch wenn nur Zahlen drinnen stehen sind Strings und werden das auch immer bleiben!

    mfg
  8. Autor dieses Themas

    samael

    samael hat kostenlosen Webspace.

    okay, ich setze mich mal morgen an das problem... liegt wohl scheinbar an der festlegung der variable...

    $price wird aus der db ausgelesen und mit $quantity multipliziert (für die dies interessiert, die überprüfung stammt aus einem e-Shop)


    gruß und bis morgen
    chris.samael
  9. Autor dieses Themas

    samael

    samael hat kostenlosen Webspace.

    if(ereg('[0-9]+(.|,)[0-9]+',$_POST['input']))
    
       {
    
       echo 'Float!\n';
    
       }
    
      elseif(ereg('[0-9]+',$_POST['input']))
    
       {
    
       echo 'Integer!\n';
    
       }
    
      else
    
       {
    
       echo 'String!\n';
    
       }



    öhm, sry wenn es vllt eine doofe frage ist, aber kann mir einer mal erklären was das script genau macht?
    ich verstehs nämlichn nicht... wäre schön zu wissen wie genau das ganze funktioniert...


    gruß
    chris.samael
  10. sandrock-jonas

    Kostenloser Webspace von sandrock-jonas

    sandrock-jonas hat kostenlosen Webspace.

    Das Script überprüft, welchen Typ deine Variable ($_POST["input"]) hat:

    Wenn sie z.B. die Form
    31,523454
    hat, dann bezeichnet man den Typ als Float (Kommazahlen)

    Wenn sie z.B. die Form
    2345
    hat, dann ist der Typ Integer (Ganzzahlen)

    Wenn sie z.B. die Form
    abc334def
    hat, dann ist der Typ String (Zeichenkette)

    Das ist im Prinzip das, was das Script macht.
  11. Autor dieses Themas

    samael

    samael hat kostenlosen Webspace.

    also macht die funktion ereg('[0-9]+(.|,)[0-9]+',$_POST['input']) folgendes:

    überprüft ob in der Variabl $_POST['input'] erst Zahlen von 0-9 stehen, dann ein . oder , kommt und danach noch zahlen sind...

    oder irre ich mich da?
    dh doch, das vor und nach dem ,|. NUR zahlen stehen können, oder?

    mfg
    chris.samael
  12. sandrock-jonas

    Kostenloser Webspace von sandrock-jonas

    sandrock-jonas hat kostenlosen Webspace.

    also macht die funktion ereg('[0-9]+(.|,)[0-9]+',$_POST['input']) folgendes:

    überprüft ob in der Variabl $_POST['input'] erst Zahlen von 0-9 stehen, dann ein . oder , kommt und danach noch zahlen sind...

    oder irre ich mich da?
    dh doch, das vor und nach dem ,|. NUR zahlen stehen können, oder?

    mfg
    chris.samael


    Richtig. Und genauso ist ja auch eine Float-Variable aufgebaut. Sie zählt zu den Zahlen-Datentypen:
    http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=61&group=11
    Deshalb darf sie auch nichts außer Zahlen und einem Komma bzw. Punkt enthalten. Ansonsten erfüllt sie nicht die Bedingungen und wird folglich nicht als Float eingestuft.
  13. samael schrieb:
    also macht die funktion ereg('[0-9]+(.|,)[0-9]+',$_POST['input']) folgendes:

    überprüft ob in der Variabl $_POST['input'] erst Zahlen von 0-9 stehen, dann ein . oder , kommt und danach noch zahlen sind...

    oder irre ich mich da?
    dh doch, das vor und nach dem ,|. NUR zahlen stehen können, oder?

    mfg
    chris.samael

    Also ähm in Wirklichkeit sind RegEx viel komplizierter aber ja das kommt so hin...
    in wirklichkeit ist es so ... [0-9]+ bedeuted zahlen von 0-9 x mal aber ohne null dh. einmal muss es vorkommen... dann (,|.) heißt Substring , oder . und dann wieder [0-9]+ eigentlich einfach aber sehr nutzvoll.
  14. Warum schreibst du nicht einfach:

    if( is_float($zahl) && !is_integer($zahl) ) {
    // Gleitkommazahl (Dezimalbruch)
    }
    else {
    // irgend ne andere Art von Zahl
    }

  15. Warum schreibst du nicht einfach:

    if( is_float($zahl) && !is_integer($zahl) ) {
    // Gleitkommazahl (Dezimalbruch)
    }
    else {
    // irgend ne andere Art von Zahl
    }

    Sorry das ich dich verbessern muss, aber das geht nicht wenn er den Wert aus der DB nimmt weil dann ist es ein string. ich glaub nicht das das mit den is_ funktionien funktioniert, ich hab das selbst schon öfters probiert bis ich dann auf RegEx umgestiegen bin.
  16. PHP konvertiert Variablentpyen nach Bedarf. Daher ist es ziemlich egal, woher der Wert kommt, und ob es sich um einen String handelt. Wenn es wirklich Probleme gibt, kann man die Variable auch vorher explizit in eine Gleitkommazahl umwandeln ("casten"):

    $var = floatval($var);

    oder eben
    (float) $var;

    Was allerdings eine nachfolgende Abfrage mit is_float() ziemlich unsinnig macht. Aber es geht in dem Fall auch ohne.

    Und: Ich bin ausgewiesener PCRE-Fanatiker. Wenn ich eine andere Lösung vorschlage, dann hat das seinen Grund ...

    Beitrag geändert: 18.11.2006 22:36:38 von alopex
  17. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!