Rundungsfehler vermeiden?
Bad Suliban
- php
0 Thomas Meinike0 teal
Hallo allerseits,
Ich hab ne Formel aufgestellt, um Sekundenwerte ins Stunde/Minute/Sekunde-Format umzuwandeln.
Mit dem (ganz normalen) Rechner von Windows hab ich sie auch ausprobiert und sie hat funktioniert. PHP allerdings erzeugt manchmal ein Rundungsfehler von -1 Sekunde. Gibt es eine Möglichkeit, den zu umgehen?
Hier die Formel ($dur = 3609):
(real) $dur_hour = ($dur / 3600);
(real) $dur_min = (($dur_hour - intval($dur_hour)) * 60);
(real) $dur_sec = (($dur_min - intval($dur_min)) * 60);
$return_dur = intval($dur_hour) . "h" . intval($dur_min) . "m" . intval($dur_sec) . "s";
Ausgabe: 1h0m8s (obwohl es eigentlich 9 sekunden sind).
MfG, ABS
Hallo,
Ich hab ne Formel aufgestellt, um Sekundenwerte ins Stunde/Minute/Sekunde-Format umzuwandeln.
Mit dem (ganz normalen) Rechner von Windows hab ich sie auch ausprobiert und sie hat funktioniert. PHP allerdings erzeugt manchmal ein Rundungsfehler von -1 Sekunde. Gibt es eine Möglichkeit, den zu umgehen?
Warum nicht gleich PHP-Bordmittel einsetzen?
<?php
$sekunden=3609;
$ausgabe=date("H:i:s",mktime(0,0,$sekunden));
print $ausgabe; // --> 01:00:09
?>
MfG, Thomas
Hallo allerseits,
Ich hab ne Formel aufgestellt, um Sekundenwerte ins Stunde/Minute/Sekunde-Format umzuwandeln.
Mit dem (ganz normalen) Rechner von Windows hab ich sie auch ausprobiert und sie hat funktioniert. PHP allerdings erzeugt manchmal ein Rundungsfehler von -1 Sekunde. Gibt es eine Möglichkeit, den zu umgehen?
Hier die Formel ($dur = 3609):
(real) $dur_hour = ($dur / 3600);
(real) $dur_min = (($dur_hour - intval($dur_hour)) * 60);
(real) $dur_sec = (($dur_min - intval($dur_min)) * 60);
$return_dur = intval($dur_hour) . "h" . intval($dur_min) . "m" . intval($dur_sec) . "s";
Ausgabe: 1h0m8s (obwohl es eigentlich 9 sekunden sind).
MfG, ABS
versuchs vielleicht mal mit der funktion round(). Allerdings ist das Problem sowieso immer, dass es vielleicht um illisekunden geht. Das heisst also 3s und 49ms werden halt abgerundet. Ich hab das Problem auch immer wenn ich einen vote mache und dann runde, das es manchmal 99% insgesamt sind mal 101% und dann wider 100%.
Sollte die Funktion round(), auch nicht zum gewünschten erfolg führen solltest du es mit den sekunden vielleicht mal so angehen, das du ein substr() über die erste zwei zeichen machst (mann muss dann noch ne funktion schreiben um ne nullstelle zu machen).
Zudem muss ich sagen das so ne funktion nicht gerade nötig wäre hast du es schon mal so versucht:
echo date("H",3609);
das sollte dir die Stunde ausgeben, glaube ich.
mfg
teal
Zudem muss ich sagen das so ne funktion nicht gerade nötig wäre hast du es schon mal so versucht:
echo date("H",3609);
Ne, aber so: $return_dur = date("G\hi\ms\s",mktime(0,0,$dur));
Dank an Thomas, der gab den richtigen Denkanstoß :-)
MfG, ABS