Fix floating point errors

Bug: 15332726
Change-Id: I6e07f3281192760d3e5f001ba658686ddd42495b
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.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 @@
             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);