Numerisches Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

Numerisches Problem

Beitragvon HarryH » Montag 8. November 2004, 10:50

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?
Gruß, Harry
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Montag 8. November 2004, 13:58

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
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Beitragvon Milan » Montag 8. November 2004, 18:56

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)
HarryH
User
Beiträge: 266
Registriert: Freitag 23. Mai 2003, 09:08
Wohnort: Deutschland

re:

Beitragvon HarryH » Dienstag 9. November 2004, 08:23

Danke für eure schnelle Erklärung!
Gruß, Harry
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Dienstag 9. November 2004, 17:51

Code: Alles auswählen

from __future__ import division
TUFKAB – the user formerly known as blackbird

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder