Andreas Korthaus: 2 Probleme mit "microtime()"

Beitrag lesen

Hi!

ich habe ein Problem mit den Rückgabewerten der Funktion microtime()

list($low, $high) = explode(" ", microtime(1));
(double)$laufzeit = (double)$high + (double)$low;
echo (double)$laufzeit;

theoretisch müßte nun in $laufzeit etwas stehen wie xxx.... ,123456
aber...

$high = 1082459384
$low = 0.032865
$laufzeit = 1082459384.0329 <--- ???

stattdessen steht in $laufzeit grds. ein Wert auf 4 Nachkommastellen gerundet
das ist umso verwirrende, als das in $low ein (richtiger) 6stelliger Wert steht (Mikrosekunden eben)

Guck mal in Deine php.ini:

; The number of significant digits displayed in floating point numbers.

da steht bei mir:

precision    =  12

entsprechend werden mir nur 2 Nachkommastellen ausgegeben.

Bei Dir steht da vermutlich 14.

mein zweites Problem

list($low, $high) = explode(" ", microtime(1));
$used = $high + $low;
(double)$laufzeit = (double)$used - (double)$laufzeit;

jetzt steht in $Laufzeit plötzlich
0.00022602081298828

Es geht hier nur um die Ausgabe, intern ist der Wert länger gespeichert. Du kannst es ganz einfach sehen, wenn Du z.B. mal mit number_format() mal ein paar mehr Nachkommastellen entlockst ;-)
Ist aber egal, beim rechnen wird die komplette Zahl genommen - sofern Du das nicht vorher in einen String konvertiert hast.

Du brauchst übrigens nicht _alles_ in (double) zu konvertieren, PHP ist nicht blöd ;-)

Grüße
Andreas

--
SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/