Index: third_party/polymer/components/iron-range-behavior/iron-range-behavior.html |
diff --git a/third_party/polymer/components/iron-range-behavior/iron-range-behavior.html b/third_party/polymer/components/iron-range-behavior/iron-range-behavior.html |
index 28469e9eaeb15a06e3e363d8c27e415b14de9648..96f3c15b02a7520897a7ab212830d9cd6dcc5b1c 100644 |
--- a/third_party/polymer/components/iron-range-behavior/iron-range-behavior.html |
+++ b/third_party/polymer/components/iron-range-behavior/iron-range-behavior.html |
@@ -83,18 +83,27 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN |
}, |
_calcStep: function(value) { |
- /** |
- * if we calculate the step using |
- * `Math.round(value / step) * step` we may hit a precision point issue |
- * eg. 0.1 * 0.2 = 0.020000000000000004 |
- * http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html |
- * |
- * as a work around we can divide by the reciprocal of `step` |
- */ |
// polymer/issues/2493 |
value = parseFloat(value); |
- return this.step ? (Math.round((value + this.min) / this.step) - |
- (this.min / this.step)) / (1 / this.step) : value; |
+ |
+ if (!this.step) { |
+ return value; |
+ } |
+ |
+ var numSteps = Math.round((value - this.min) / this.step); |
+ if (this.step < 1) { |
+ /** |
+ * For small values of this.step, if we calculate the step using |
+ * `Math.round(value / step) * step` we may hit a precision point issue |
+ * eg. 0.1 * 0.2 = 0.020000000000000004 |
+ * http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html |
+ * |
+ * as a work around we can divide by the reciprocal of `step` |
+ */ |
+ return numSteps / (1 / this.step) + this.min; |
+ } else { |
+ return numSteps * this.step + this.min; |
+ } |
}, |
_validateValue: function() { |