Seite 2 von 2

Re: funktion ob ergebnis ganzzahl ist

Verfasst: Sonntag 15. Januar 2012, 18:18
von pillmuncher
Andererseits ginge vielleicht auch das hier:

Code: Alles auswählen

import math

def is_integerish(x):
    return math.floor(x) == math.ceil(x)
Im Übrigen solte man erwähnen, dass floating point Zahlen so verglichen werden sollten:

Code: Alles auswählen

EPSILON = ... # hier bitte ein hinreichend kleines float zuweisen

def feq(x, y):
    return abs(float(x)-float(y)) < EPSILON
wobei EPSILON passend gewählt werden muss. Entsprechend würde der Code zum Testen von Ganzzahligkeit etwa so aussehen:

Code: Alles auswählen

def is_integerish(x):
    return feq(x, math.floor(x)) or feq(x, math.ceil(x))
Auch das kann allerdings in die Hose gehen, wenn EPSILON falsch gewählt wurde.

Re: funktion ob ergebnis ganzzahl ist

Verfasst: Sonntag 15. Januar 2012, 18:27
von JustinJ
wäre

Code: Alles auswählen

>>> a = 4.0000
>>> a == round(a, 0)
True
nicht auch eine idee?


demnach

Code: Alles auswählen

def is_integer(x):
    return x == round(x, 0)

Re: funktion ob ergebnis ganzzahl ist

Verfasst: Sonntag 15. Januar 2012, 18:29
von nomnom
Hmmmm …

Code: Alles auswählen

In [9]: a('round(1.234, 0) == 1.234')
Out[9]: 2.1165199279785156

In [10]: a('int(1.234) == 1.234')
Out[10]: 0.423098087310791
Edit: Hab was vergessen:

Code: Alles auswählen

def a(*args):
    return timeit.Timer(*args).timeit()
Edit #2: Noch krasserer Unterschied:

Code: Alles auswählen

In [11]: a('not 1.234 % 1')
Out[11]: 0.05470418930053711 # ca. 38,7× schneller :D
;)

Warum man timeit nicht trauen sollte!