Ich habe für PHP eine kleine Funktion entwickelt, die ich nun hier vorstellen möchte.
Das Problem…
…wenn du auf deiner Website mit Zahlen, die viele Nachkommastellen besitzen, arbeitest, werden diese häufig in Exponentialschreibweise dargestellt, zum Beispiel:
1.0E-6 = 1.0 * 10^(-6) = 0.000001
Für die Besucher ist es in der Regel hilfreicher, wenn du ihnen einen Float-Wert (=Kommazahl) bzw. Integer bei (…E+…) anzeigst.
Die Lösung: exptofloat()
Dafür habe ich eine simple Funktion entwickelt, die ich dir mit Hilfe dieses Artikels zur Verfügung stelle.
function exptofloat($i) { if (stripos($i, "E")) { $c = explode("E", $i); $v = intval(substr($c[1], 1)); if ($v < 21) { if (substr($c[1], 0, 1) == '-') { return number_format($i, $v, '.', ' '); } else { return number_format(($i * pow(10, $v)), 0, '.', ' '); } } else return $i; } else return $i; }
Dieser Code geht davon aus, dass das „E“ in der Exponential-Schreibweise großgeschrieben wird. Mir ist bisher kein Fall bekannt, wo PHP das „e“ kleinschreibt, sollte dies jedoch bei deinem Server der Fall sein, ersetze einfach die beiden großen „E“’s durch kleine.
Hinweis: Diese Funktion ist ein freies OpenSource-Produkt und darf von dir beliebig (kommerziell/privat) und ohne Namensnennung verwendet werden.
So funktioniert’s
Wenn du nun eine Zahl von der Exponential-Schreibweise umwandeln möchtest, fügst die Funktion zuerst ein und übergibst ihr, die Zahl:
$zahl = 1.0E-6;
echo exptofloat($zahl);
// AUSGABE: 0.000001
$zahl = 1.0E+6;
echo exptofloat($zahl);
// AUSGABE: 1 000 000
$zahl = 1.36;
echo exptofloat($zahl);
// AUSGABE: 1.36
$zahl = 1.0E-30;
echo exptofloat($zahl);
// AUSGABE: 1.0E-30
Dabei macht die Funktion folgendes:
- Prüfen ob es sich um eine Zahl in Exponentialschreibweise handelt, wenn nicht wird die Zahl zurückgegeben.
- Die Zahl wird zerlegt. In den Teil vor und nach dem „E“.
- Die Nachkommastellen bzw. Nullen (E-… / E+…) werden anhand des zweiten Teils ermittelt. Sind es mehr als 20, wird die Zahl unbearbeitet zurückgegeben.
- Bei „E-“ wird die Zahl korrekt formatiert zurückgegeben mit den Nachkommastellen (Dezimaltrennzeichen: „.“, Tausendertrennzeichen: “ „).
- Bei „E+“ wird die Zahl korrekt formatiert zurückgegeben mit den Nullen (Dezimaltrennzeichen: „.“, Tausendertrennzeichen: “ „).
Vielen Dank für dieses Skript!
Wenn es nur Zahlen mit zu vielen nachkommastellen sind wie bei mir ist folgendes am einfachsten:
$num = 1.26E-5;
echo $num; // 1.26E-5
$float = number_format( $num,7); // Zahl mit 7 Nachkommastellen
echo $float; // 0.0000126