summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJustin Klaassen <justinklaassen@google.com>2014-05-30 18:13:04 -0700
committerJustin Klaassen <justinklaassen@google.com>2014-05-31 11:23:34 -0700
commit696f2291b2f1d4905b7e30290bc4c0daba55ca6c (patch)
treea55db32c96962951402cf28830a0d2f6d2c1b737
parent4b3af0578b1a44038856bc56244aea8aaeac22d1 (diff)
downloadandroid_packages_apps_ExactCalculator-696f2291b2f1d4905b7e30290bc4c0daba55ca6c.tar.gz
android_packages_apps_ExactCalculator-696f2291b2f1d4905b7e30290bc4c0daba55ca6c.tar.bz2
android_packages_apps_ExactCalculator-696f2291b2f1d4905b7e30290bc4c0daba55ca6c.zip
Fix floating point errors
Bug: 15332726 Change-Id: I6e07f3281192760d3e5f001ba658686ddd42495b
-rw-r--r--src/com/android/calculator2/CalculatorExpressionEvaluator.java8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/com/android/calculator2/CalculatorExpressionEvaluator.java b/src/com/android/calculator2/CalculatorExpressionEvaluator.java
index 0f41423..992735c 100644
--- a/src/com/android/calculator2/CalculatorExpressionEvaluator.java
+++ b/src/com/android/calculator2/CalculatorExpressionEvaluator.java
@@ -23,7 +23,8 @@ import org.javia.arity.SyntaxException;
import org.javia.arity.Util;
public class CalculatorExpressionEvaluator {
- private static final int MAX_DIGITS = 14;
+ private static final int MAX_DIGITS = 12;
+ private static final int ROUNDING_DIGITS = 1;
private final Symbols mSymbols;
private final CalculatorExpressionTokenizer mTokenizer;
@@ -65,8 +66,11 @@ public class CalculatorExpressionEvaluator {
if (Double.isNaN(result)) {
callback.onEvaluate(expr, null, mErrorNaN);
} else {
+ // The arity library uses floating point arithmetic when evaluating the expression
+ // leading to precision errors in the result. The method doubleToString hides these
+ // errors; rounding the result by dropping N digits of precision.
callback.onEvaluate(expr, mTokenizer.getLocalizedExpression(
- Util.doubleToString(result, MAX_DIGITS, 0)), null);
+ Util.doubleToString(result, MAX_DIGITS, ROUNDING_DIGITS)), null);
}
} catch (SyntaxException e) {
callback.onEvaluate(expr, null, mErrorSyntax);