Seite 1 von 1

Numerisches Problem

Verfasst: Montag 8. November 2004, 10:50
von HarryH
Hallo,

Habe folgenden Unterschied in der Ausgabe festgestellt.

1.Beispiel:

Code: Alles auswählen

def GetHMS(s):
    sec = s
    h = (sec > 3599 and sec / 3600 or 0)
    m = (sec - h*3600 > 59 and (sec - h*3600) / 60 or 0)
    s = (sec - h*3600 - m*60 > 0 and (sec - h*3600 - m*60) or 0)
    return "%02.f:%02.f:%02.f" % (h, m, s)

sec = 12376

print GetHMS(sec)
Ausgabe:

Code: Alles auswählen

03:26:16
2.Beispiel:

Code: Alles auswählen

def GetHMS(s):
    sec = s
    h = (sec > 3599 and sec / 3600 or 0)
    m = (sec - h*3600 > 59 and (sec - h*3600) / 60 or 0)
    s = (sec - h*3600 - m*60 > 0 and (sec - h*3600 - m*60) or 0)
    return "%02.f:%02.f:%02.f" % (h, m, s)

sec = 12376.0

print GetHMS(sec)
Ausgabe:

Code: Alles auswählen

03:00:00
Warum dieser Unterschied?

Verfasst: Montag 8. November 2004, 13:58
von mawe
Hi!

Code: Alles auswählen

sec = 12345
h = sec > 3599 and sec / 3600 or 0  # -> h = 3
h * 3600 #  -> 10800
sec - h*3600 > 59 # True

sec = 12345.0
h = sec > 3599 and sec / 3600 or o # -> h = 3.429.....
h * 3600 # -> 12345.0 = sec !!
sec - h*3600 > 59 # -> 0, daher False
Gruß, mawe

Verfasst: Montag 8. November 2004, 18:56
von Milan
HI. Ein Tipp: Benutze divmod, damit umschiffst du das Problem elegant:

Code: Alles auswählen

def GetHMS(s): 
    h,s = divmod(s,3600)
    m,s=divmod(s,60)
    return "%02.f:%02.f:%02.f" % (h, m, s)

re:

Verfasst: Dienstag 9. November 2004, 08:23
von HarryH
Danke für eure schnelle Erklärung!

Verfasst: Dienstag 9. November 2004, 17:51
von mitsuhiko

Code: Alles auswählen

from __future__ import division