Commit 8b0fcc2d authored by Hans Boehm's avatar Hans Boehm Committed by Android Git Automerger
Browse files

am 73868209: am ec7517f3: Check for decimal point after adding ellipsis

* commit '73868209':
  Check for decimal point after adding ellipsis
parents 3be0cbfe 73868209
......@@ -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;
}
......
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment