summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Boehm <hboehm@google.com>2015-10-11 15:55:02 (GMT)
committerAndroid Git Automerger <android-git-automerger@android.com>2015-10-11 15:55:02 (GMT)
commit8b0fcc2daa833eb569a8f58c0833db498cbe4824 (patch)
tree2b8760d04bd4ef6e731c72524022aa48b6d72f61
parent3be0cbfe04a40b1e6c7b676f02cda351b4c5df3e (diff)
parent73868209c19e2cf84b198c6224c6953a758c0b61 (diff)
downloadandroid_packages_apps_ExactCalculator-8b0fcc2daa833eb569a8f58c0833db498cbe4824.zip
android_packages_apps_ExactCalculator-8b0fcc2daa833eb569a8f58c0833db498cbe4824.tar.gz
android_packages_apps_ExactCalculator-8b0fcc2daa833eb569a8f58c0833db498cbe4824.tar.bz2
am 73868209: am ec7517f3: Check for decimal point after adding ellipsis
* commit '73868209c19e2cf84b198c6224c6953a758c0b61': Check for decimal point after adding ellipsis
-rw-r--r--src/com/android/calculator2/CalculatorResult.java70
-rw-r--r--tests/README.txt2
2 files changed, 37 insertions, 35 deletions
diff --git a/src/com/android/calculator2/CalculatorResult.java b/src/com/android/calculator2/CalculatorResult.java
index 289e13d..5c96867 100644
--- a/src/com/android/calculator2/CalculatorResult.java
+++ b/src/com/android/calculator2/CalculatorResult.java
@@ -370,8 +370,12 @@ public class CalculatorResult extends AlignedTextView {
boolean negative, int lastDisplayedOffset[], boolean forcePrecision) {
final int minusSpace = negative ? 1 : 0;
final int msdIndex = truncated ? -1 : getNaiveMsdIndexOf(in); // INVALID_MSD is OK.
- final int decIndex = in.indexOf('.');
String result = in;
+ if (truncated || (negative && result.charAt(0) != '-')) {
+ result = KeyMaps.ELLIPSIS + result.substring(1, result.length());
+ // Ellipsis may be removed again in the type(1) scientific notation case.
+ }
+ final int decIndex = result.indexOf('.');
lastDisplayedOffset[0] = precOffset;
if ((decIndex == -1 || msdIndex != Evaluator.INVALID_MSD
&& msdIndex - decIndex > MAX_LEADING_ZEROES + 1) && precOffset != -1) {
@@ -400,42 +404,38 @@ public class CalculatorResult extends AlignedTextView {
exponent = initExponent + resLen - msdIndex - 1;
hasPoint = true;
}
- if (exponent != 0 || truncated) {
- // Actually add the exponent of either type:
- if (!forcePrecision) {
- int dropDigits; // Digits to drop to make room for exponent.
- if (hasPoint) {
- // Type (1) exponent.
- // Drop digits even if there is room. Otherwise the scrolling gets jumpy.
- dropDigits = expLen(exponent);
- if (dropDigits >= result.length() - 1) {
- // Jumpy is better than no mantissa. Probably impossible anyway.
- dropDigits = Math.max(result.length() - 2, 0);
- }
- } else {
- // Type (2) exponent.
- // Exponent depends on the number of digits we drop, which depends on
- // exponent ...
- for (dropDigits = 2; expLen(initExponent + dropDigits) > dropDigits;
- ++dropDigits) {}
- exponent = initExponent + dropDigits;
- if (precOffset - dropDigits > mLsdOffset) {
- // This can happen if e.g. result = 10^40 + 10^10
- // It turns out we would otherwise display ...10e9 because it takes
- // the same amount of space as ...1e10 but shows one more digit.
- // But we don't want to display a trailing zero, even if it's free.
- ++dropDigits;
- ++exponent;
- }
+ // Exponent can't be zero.
+ // Actually add the exponent of either type:
+ if (!forcePrecision) {
+ int dropDigits; // Digits to drop to make room for exponent.
+ if (hasPoint) {
+ // Type (1) exponent.
+ // Drop digits even if there is room. Otherwise the scrolling gets jumpy.
+ dropDigits = expLen(exponent);
+ if (dropDigits >= result.length() - 1) {
+ // Jumpy is better than no mantissa. Probably impossible anyway.
+ dropDigits = Math.max(result.length() - 2, 0);
+ }
+ } else {
+ // Type (2) exponent.
+ // Exponent depends on the number of digits we drop, which depends on
+ // exponent ...
+ for (dropDigits = 2; expLen(initExponent + dropDigits) > dropDigits;
+ ++dropDigits) {}
+ exponent = initExponent + dropDigits;
+ if (precOffset - dropDigits > mLsdOffset) {
+ // This can happen if e.g. result = 10^40 + 10^10
+ // It turns out we would otherwise display ...10e9 because it takes
+ // the same amount of space as ...1e10 but shows one more digit.
+ // But we don't want to display a trailing zero, even if it's free.
+ ++dropDigits;
+ ++exponent;
}
- result = result.substring(0, result.length() - dropDigits);
- lastDisplayedOffset[0] -= dropDigits;
}
- result = result + "E" + Integer.toString(exponent);
- } // else don't add zero exponent
- }
- if (truncated || negative && result.charAt(0) != '-') {
- result = KeyMaps.ELLIPSIS + result.substring(1, result.length());
+ result = result.substring(0, result.length() - dropDigits);
+ lastDisplayedOffset[0] -= dropDigits;
+ }
+ result = result + "E" + Integer.toString(exponent);
}
return result;
}
diff --git a/tests/README.txt b/tests/README.txt
index b5e6dfe..304766f 100644
--- a/tests/README.txt
+++ b/tests/README.txt
@@ -39,6 +39,8 @@ Some interesting manual test cases:
-10^30 - 10^10
-1.2x10^-9
-1.2x10^-8
+-1.2x10^-10
+-10^-12
1 - 10^-98
1 - 10^-100
1 - 10^-300