Hm, you are right, it is actually a problem, that downscaling factor will always be floats., but how about:

    In [1]: from numpy.testing import assert_almost_equal

    In [2]: check = lambda x: assert_almost_equal((1. / x) % 1, 0, decimal=10)

    In [3]: check(0.5)

    In [4]: check(0.51)
    ---------------------------------------------------------------------------
    AssertionError                            Traceback (most recent call last)
    <ipython-input-4-74591b4c7230> in <module>()
    ----> 1 check(0.51)

    <ipython-input-2-13852142f906> in <lambda>(x)
    ----> 1 check = lambda x: assert_almost_equal((1. / x) % 1, 0, decimal=10)

    /Users/hannes/.virtualenvs/skimage/lib/python2.7/site-packages/numpy/testing/utils.pyc in assert_almost_equal(actual, desired, decimal, err_msg, verbose)
        466         pass
        467     if round(abs(desired - actual),decimal) != 0 :
    --> 468         raise AssertionError(msg)
        469 
        470 

    AssertionError: 
    Arrays are not almost equal to 10 decimals
     ACTUAL: 0.9607843137254901
     DESIRED: 0

    In [5]: check(0.25)

    In [6]: check(1./10)

I think this code is pretty robust... what do you think?