Woodstock Geschrieben 14. Juli 2003 Teilen Geschrieben 14. Juli 2003 Also, noch ein Problem. Ich führe mit ein paar Zahlen Rechenoperationen durch. Das Ergebnis ist so groß das es mir als 1.8494380618592E+020 ausgegeben wird. Wie kann ich das so ausgeben das ich keine Potenz darin habe? Kann ruhig ein String sein - also ich muss damit nicht weiter rechnen können. Bine Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kinnley Geschrieben 14. Juli 2003 Teilen Geschrieben 14. Juli 2003 Probiers es mal mit number_format zum formatieren der Zahl number_format(zahl, 0, ",",".") Leider hab ich noch nicht ausprobiert, wie sich printf bei so grossen zahlen verhalten. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Woodstock Geschrieben 14. Juli 2003 Autor Teilen Geschrieben 14. Juli 2003 Dabei bekomme ich leider nicht die Zahl raus die ich haben will. Mir geht es darum das er Zahlen ab einer bestimmten Größe als Potenz ausgibt (also mit dem E dazwischen) - und das will ich vermeiden. Ich will kein Komma durch irgendwas ersetzen. Bine Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DanielH Geschrieben 14. Juli 2003 Teilen Geschrieben 14. Juli 2003 Hast du printf schon versucht ? printf("%30.2f", $zahl); 30 Stellen vor bzw. nach dem Komma sollten eigentlich ausreichen, es sei denn du rechnest gegen unendlich... Dann nimm lieber ein paar mehr MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kinnley Geschrieben 14. Juli 2003 Teilen Geschrieben 14. Juli 2003 Also hier nochmal eine Verdeutlichung: $zahl=123451234512345123451234512345; normale Ausgabe: echo $zahl; 1.2345123451235E+29 echo number_format($zahl, 0, "",""); 123451234512345121227855101952 echo sprintf("%30.0f", $zahl); 123451234512345120000000000000 Woher die Ungenauigkeit: Fließkomma Präzision Es ist ziemlich normal, dass einfache Dezimalzahlen wie 0.1 oder 0.7 nicht in ihre internen binären Entsprechungen konvertiert werden können, ohne einen kleinen Teil ihrer Genauigkeit zu verlieren. Das kann zu verwirrenden Ergebnissen führen. So wird floor((0.1 + 0.7) * 10) normalerweise 7 statt des erwarteten Wertes 8 zurück geben (als Ergebnis der internen Entsprechung von 7.9999999999.... Das gründet sich auf die Tatsache, dass es unmöglich ist, manche Dezimal-Zahlen durch eine endliche Anzahl an Nachkomma-Stellen darzustellen. Dem Wert 1/3 entspricht z.B. der interne Wert von 0.3333333. . .. Deshalb sollten Sie nie den Ergebnissen von Fließkomma-Operationen bis auf die letzte Nachkomma-Stelle trauen und nie solche auf Gleichheit prüfen. Benötigen Sie wirklich eine größere Genauigkeit, sollten sie die mathematischen Funktionen beliebiger Genauigkeit oder die Gmp Funktionen benutzen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DanielH Geschrieben 15. Juli 2003 Teilen Geschrieben 15. Juli 2003 Könnte das vielleicht auch noch andere Gründe haben ? PHP-Version, CPU oder ähnliches ? $zahl=123451234512345123451234512345; echo $zahl."<br><br>"; echo number_format($zahl, 0, "","")."<br><br>"; echo sprintf("%30.0f", $zahl)."<br><br>"; [/PHP] gibt bei mir 1.2345123451235E+029 123451234512345120000000000000 123451234512345170000000000000 aus. :confused: MfG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kinnley Geschrieben 15. Juli 2003 Teilen Geschrieben 15. Juli 2003 Das Ergebnis sieht doch ganz gut aus. Mehr gibt float nicht her. Wenn du es noch genauer haben willst, hilft dir nur noch eins: Benutze mathematische Funkrionen mit beliebiger genauigkeit oder gmp wenn du es genauer haben willst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.