The problem with ranges for floats is that the range is efectively infinite, even if he limits are known.
What I do for those cases is to use a record + helper/method: the record contains the upper and lower limits and the helper/method test a float against those limits.
But, of course, that doesn't give you the type-selection you want; you'd still have to declare the type