Ankündigung

Einklappen
Keine Ankündigung bisher.

Von Float zu Integer ?

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Von Float zu Integer ?

    Hallo zusammen,

    ich übe gerade PHP und hab ein Problem, daher meine Bitte mir zu helfen.

    Es geht um folgendes:

    echo $e=9900000000000015;
    echo $A=(int) $e;


    Ausgabe $e= 9.9E+015
    Ausgabe $A= 1598472206

    Wie kann ich richtig Parsen/Casten oder wie man es nennt sodass $e=9900000000000015 ist?

    Ich bedanke mich bereits für die Mühe.


  • #2
    http://www.php.net/manual/de/language.types.integer.php

    Umwandlung nach integer
    Um einen Wert ausdrücklich nach integer zu konvertieren, benutzen Sie entweder die Umwandlung mittels (int) oder (integer). In den allermeisten Fällen ist es jedoch nicht notwendig die Umwandlung selbst vorzunehmen. Ein Wert wird automatisch konvertiert, falls ein Operator, eine Funktion oder eine Kontrollstruktur ein integer Argument erfordern. Sie können einen Wert auch mit der Funktion intval() in einen Integer umwandeln.
    wozu also?
    privater Blog

    Kommentar


    • #3
      Um folgendes geht es:

      $query_art= mysql_query("SELECT ARTIKELNR, ARTIKEL FROM ARTIKELN");
      $art_nr=mysql_fetch_assoc($query_art);
      echo $art_nr["ARTIKELNR"];
      if (!is_integer($art_nr["ARTIKELNR"])) {
      echo intval($art_nr["ARTIKELNR"]);
      }else echo "geht nicht!";
      }

      Ausgabe sollte:

      Artikel : XXX
      ArtkelNr: 99000000000000015

      ...sein


      PHP aber wandelt die Artikelnummer in FLOAT / DOUBLE.

      Wenn ich richtig verstanden habe, dann muss ich entweder ARTIKELNR kürzen oder das ganze vergessen, richtig?

      Vielleicht ist das ganze auch nur ein Denkfehler und ich muss nur bei der Abfrage was ändern oder?

      Kommentar


      • #4
        99000000000000015 ist ein wenig gross für einen Integer, ausser auf 64bit-Systemen.
        Im Float werden auch schon die letzten Stellen fehlen. Warum nicht einfach als String verarbeiten? In MySQL beim Auslesen ein cast() oder convert() nach char? http://dev.mysql.com/doc/mysql/en/Cast_Functions.html

        Im Zweifelsfall bietet sich bcmath() zum rechnen in PHP an.

        PS: Welche PHP-Version?
        mod = master of disaster

        Kommentar


        • #5
          Hi, ich habe auch ein typen-problem (glaub ich zumindest)

          ich hatte folgenden code:
          PHP-Code:
          $price 12.34;
          $cents = ($price floor($price))*100;
          if(
          $cents == 99){return TRUE;}
          elseif(
          $cents == 98){return TRUE;} 
          und noch ein paar weitere elseif's
          Ich dachte mir switch wäre da praktischer, also:
          PHP-Code:
          $price 12.34;
          $cents = ($price floor($price))*100;
          switch(
          $price){
            case 
          99: return TRUE;
            case 
          98: return TRUE;

          jedoch hat das nie true zurückgegeben. Nachdem ich folgendes geändert hatte, gings wieder:
          PHP-Code:
          $cents = (int)($price floor($price))*100
          mir ist dann jedoch irgendwann aufgefallen, das manchmal das ergebnis um 1 zu klein ist (siehe http://de3.php.net/manual/de/languag...nteger.casting)
          was kann ich da machen, dass es richtig konvertiert wird? ich habs auch schon mit intval() versucht und mit case 99.00 ... alles ohne erfolg
          warum hat php probleme mit der konvertierung?

          edit: mich interessiert die antwort immer noch, aber ich habs jetzt so gelöst:
          PHP-Code:
          if(substr_count($price'.')==1){
            
          $price substr($price, -2);
            switch(
          $price){
              case 
          99: return TRUE;
              case 
          98: return TRUE;
            }


          http://www.martin-thoma.de

          Kommentar


          • #6
            Wofür ist denn überhaupt die $cents-Formel? Du multiplizierst den Cent-Wert mit 100?
            Könntest du auch den Modulo-Operator für verwenden:
            Code:
            $value = (int)round($price * 100, 0) % 100;
            Um (durch double erzeugte) Nachkommastellen zu entfernen benutz doch einfach round(). Da es um Geld geht, würde ich in Zukunft überlegen, Preise als Integer mit Cent-Einheit abzuspeichern.

            Kommentar

            Lädt...
            X