Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

PHP Zahlen nicht als Potenz ausgeben!

Empfohlene Antworten

Veröffentlicht

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

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.

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

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... :D Dann nimm lieber ein paar mehr :rolleyes:

MfG

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.

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

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.