         if (interval != Math.round(interval)) 
         { 
             const parts:Array = (new String(1 + interval)).split("."); 
-            scale = Math.pow(10, parts[1].length); 
-            minValue *= scale;
+            scale = Math.pow(10, parts[1].length);
             maxValue *= scale;
             value = Math.round(value * scale);
             interval = Math.round(interval * scale);
         }   
         
-        var lower:Number = Math.max(minValue, Math.floor(value / interval) * interval);
+        var lower:Number = Math.max(0, Math.floor(value / interval) * interval);
         var upper:Number = Math.min(maxValue, Math.floor((value + interval) / interval) * interval);
         var validValue:Number = ((value - lower) >= ((upper - lower) / 2)) ? upper : lower;
-
-        return validValue / scale;
+        
+        return (validValue / scale) + minimum;
     }
         
     /**

    }
    
    /**
     *  Returns the integer multiple of <code>interval</code> that's closest to <code>value</code>, unless
     *  <code>value</code> is closer to either the minimum or the maximum limit, in which
     *  case the corresponding limit is returned.
     * 
     *  <p>If <code>interval</code> is equal to 0, the value is clipped to the minimum and maximum 
     *  limits.</p>
     * 
     *  <p>The valid values for a range are defined by the <code>minimum</code> and <code>maximum</code>
     *  properties and the multiples of the <code>interval</code> in between. 
     * 
     *  The minimum and maximum values need not be a multiple of <code>snapInterval</code>.</p>
     * 
     *  <p>For example, if <code>minimum</code> is equal to 1, <code>maximum</code> is equal to 5,
     *  and <code>snapInterval</code> is equal to 2, the valid
     *  values for the Range are 1, 2, 4, 5.
     * 
     *  Similarly, if <code>minimum</code> is equal to 2, <code>maximum</code> is equal to 8,
     *  and <code>snapInterval</code> is equal to 1.5, the valid
     *  values for the Range are 2, 3, 4.5, 6, 7.5, and 8.</p>
     * 
     *  @param value The input value.
     *  @param interval The value of snapInterval or an integer multiple of snapInterval.

    { 
        if (interval == 0)
            return Math.max(minimum, Math.min(maximum, value));
        
        var maxValue:Number = maximum - minimum;
        var scale:Number = 1;
        
        value -= minimum;
        
        // If interval isn't an integer, there's a possibility that the floating point 
        // approximation of value or value/interval will be slightly larger or smaller 
        // than the real value.  This can lead to errors in calculations like 
