Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit großen Zahlen

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

  • Problem mit großen Zahlen

    Ich würde gerne mit Zahlen von 600 Millionen bis 2 Quadrilionen arbeiten.
    Und zwar nehme ich diese *0,33 (also 33%) und gebe diese dann aus.
    da ich keine Kommazahlen will, runde ich die Zahl mit round(). Allerdings bekomme ich da eine potenzierte Zahl zurück, mit der ich dann nichts anfangen kann, z.B. 1,736262E+20.
    Wie kann ich die Zahl ohne Kommata ausgeben, jedoch ohne Potenz?
    Ich habe es mit explode(‘.‘, $zahl) probiert, dies funktioniert leider nicht.


  • #2
    http://php.net/manual/de/function.number-format.php

    Kommentar


    • #3
      Da stellt sich für mich die Frage, wieso aus

      123456789123456789

      123,456,789,123,456,784

      wird.


      Kommentar


      • #4
        Hast du die verlinkte Doku gelesen, dann sollte die Frage geklärt sein. Default-Parameter und so...

        Vgl.
        PHP-Code:
        $d 123456789123456789;
        echo 
        number_format($d0',''.');
        // 123.456.789.123.456.784 
        EDIT:

        Ah.. du meinst die letzte Zahl.. erst jetzt gesehen.. Sorry, dachte du beziehst dich auf die Komma als Tausendertrenner.

        LG
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Dürfte wohl damit zusammenhängen: https://stackoverflow.com/a/35170104

          Dort ist auch eine Lösungs-Funktion.
          PHP-Code:
          function number_format_string($number) {
              return 
          strrev(implode('.'str_split(strrev($number), 3)));
          }

          $d 123456789123456789;
          var_dump($d);
          // int(123456789123456789)  ## OK!

          var_dump( (string)$d );
          // string(18) "123456789123456789"  ## OK!

          var_dumpnumber_format($d0',''.') );
          // string(23) "123.456.789.123.456.784"  ## Huh?!

          var_dumpnumber_format_string($d) );
          // string(23) "123.456.789.123.456.789"  ## OK! 
          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Zitat von moloe Beitrag anzeigen
            Da stellt sich für mich die Frage, wieso aus

            123456789123456789

            123,456,789,123,456,784

            wird.
            Weil der Datentyp Float eine begrenzte Genauigkeit hat.

            Siehe:

            http://php.net/manual/de/language.types.float.php
            https://de.wikipedia.org/wiki/Gleitk...Digitaltechnik

            Kommentar


            • #7
              Zitat von hausl Beitrag anzeigen
              Dürfte wohl damit zusammenhängen: https://stackoverflow.com/a/35170104

              Dort ist auch eine Lösungs-Funktion.
              PHP-Code:
              function number_format_string($number) {
              return 
              strrev(implode('.'str_split(strrev($number), 3)));
              }

              $d 123456789123456789;
              var_dump($d);
              // int(123456789123456789) ## OK!

              var_dump( (string)$d );
              // string(18) "123456789123456789" ## OK!

              var_dumpnumber_format($d0',''.') );
              // string(23) "123.456.789.123.456.784" ## Huh?!

              var_dumpnumber_format_string($d) );
              // string(23) "123.456.789.123.456.789" ## OK! 
              Sehr schön, vielen Dank!

              Kommentar


              • #8
                Zitat von hellbringer Beitrag anzeigen
                Weil der Datentyp Float eine begrenzte Genauigkeit hat.
                ist er für Berechnungen mit sehr großen Zahlen ungeeignet!
                Dafür gibt es die BC Math Funktionen. Und irgendwelche Workarounds mit number_format brauchst du für deinen Fall dann auch nicht mehr.
                PHP-Code:
                $zahl "123456789123456789123456789";
                $mul "0.33";
                $result bcmul($zahl,$mul,0);
                echo 
                $result;
                //40740740410740740410740740 
                PHP-Klassen auf github

                Kommentar

                Lädt...
                X