|
30 | 30 | import static java.lang.Math.abs;
|
31 | 31 | import static java.lang.Math.max;
|
32 | 32 | import static java.lang.Math.min;
|
| 33 | +import static java.math.MathContext.DECIMAL64; |
33 | 34 |
|
34 | 35 | import android.animation.Animator;
|
35 | 36 | import android.animation.AnimatorListenerAdapter;
|
|
101 | 102 | import java.lang.annotation.Retention;
|
102 | 103 | import java.lang.annotation.RetentionPolicy;
|
103 | 104 | import java.math.BigDecimal;
|
104 |
| -import java.math.MathContext; |
105 | 105 | import java.util.ArrayList;
|
106 | 106 | import java.util.Collections;
|
107 | 107 | import java.util.Iterator;
|
@@ -606,14 +606,18 @@ private void validateValueTo() {
|
606 | 606 |
|
607 | 607 | private boolean valueLandsOnTick(float value) {
|
608 | 608 | // Check that the value is a multiple of stepSize given the offset of valueFrom.
|
609 |
| - return isMultipleOfStepSize(value - valueFrom); |
| 609 | + double result = |
| 610 | + new BigDecimal(Float.toString(value)) |
| 611 | + .subtract(new BigDecimal(Float.toString(valueFrom)), DECIMAL64) |
| 612 | + .doubleValue(); |
| 613 | + return isMultipleOfStepSize(result); |
610 | 614 | }
|
611 | 615 |
|
612 |
| - private boolean isMultipleOfStepSize(float value) { |
| 616 | + private boolean isMultipleOfStepSize(double value) { |
613 | 617 | // We're using BigDecimal here to avoid floating point rounding errors.
|
614 | 618 | double result =
|
615 |
| - new BigDecimal(Float.toString(value)) |
616 |
| - .divide(new BigDecimal(Float.toString(stepSize)), MathContext.DECIMAL64) |
| 619 | + new BigDecimal(Double.toString(value)) |
| 620 | + .divide(new BigDecimal(Float.toString(stepSize)), DECIMAL64) |
617 | 621 | .doubleValue();
|
618 | 622 |
|
619 | 623 | // If the result is a whole number, it means the value is a multiple of stepSize.
|
|
0 commit comments