Skip to content

Commit 8ee248e

Browse files
committed
Strip trailing zeroes from result
1 parent 0a62a09 commit 8ee248e

File tree

3 files changed

+27
-15
lines changed

3 files changed

+27
-15
lines changed

calcdialog/src/main/java/com/maltaisn/calcdialog/CalcPresenter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -396,7 +396,8 @@ private void reset() {
396396

397397
private void calculate() {
398398
try {
399-
currentValue = expression.evaluate(settings.isOrderOfOperationsApplied, nbFormat.getRoundingMode());
399+
currentValue = expression.evaluate(settings.isOrderOfOperationsApplied,
400+
settings.nbFormat.getMaximumFractionDigits(), nbFormat.getRoundingMode());
400401
} catch (ArithmeticException e) {
401402
// Division by zero occurred.
402403
setError(ERROR_DIV_ZERO);

calcdialog/src/main/java/com/maltaisn/calcdialog/Expression.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ void clear() {
4848
* @throws ArithmeticException if a division by zero occurred.
4949
*/
5050
@NonNull
51-
BigDecimal evaluate(boolean priority, RoundingMode roundingMode) {
51+
BigDecimal evaluate(boolean priority, int scale, RoundingMode roundingMode) {
5252
if (numbers.size() != operators.size() + 1) {
5353
throw new IllegalStateException("Numbers and operators aren't balanced.");
5454
}
@@ -72,7 +72,7 @@ BigDecimal evaluate(boolean priority, RoundingMode roundingMode) {
7272
ops.remove(i);
7373
BigDecimal n1 = nbs.get(i);
7474
BigDecimal n2 = nbs.remove(i + 1);
75-
nbs.set(i, n1.divide(n2, roundingMode));
75+
nbs.set(i, n1.divide(n2, scale, roundingMode));
7676
} else {
7777
i++;
7878
}
@@ -91,11 +91,11 @@ BigDecimal evaluate(boolean priority, RoundingMode roundingMode) {
9191
} else if (op == Operator.MULTIPLY) {
9292
nbs.set(0, n1.multiply(n2));
9393
} else {
94-
nbs.set(0, n1.divide(n2, roundingMode));
94+
nbs.set(0, n1.divide(n2, scale, roundingMode));
9595
}
9696
}
9797

98-
return nbs.remove(0);
98+
return nbs.remove(0).stripTrailingZeros();
9999
}
100100

101101
/**

calcdialog/src/test/java/com/maltaisn/calcdialog/ExpressionTest.java

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ public void twoSum() {
3232
expr.operators.add(Expression.Operator.ADD);
3333
expr.numbers.add(new BigDecimal("-24.8"));
3434

35-
BigDecimal result = expr.evaluate(false, RoundingMode.HALF_UP);
36-
assertEquals(0, result.compareTo(new BigDecimal("-12.7")));
35+
BigDecimal result = expr.evaluate(false, 8, RoundingMode.HALF_UP);
36+
assertEquals(result, new BigDecimal("-12.7"));
3737
}
3838

3939
@Test
@@ -45,11 +45,11 @@ public void sumAndMultiply() {
4545
expr.operators.add(Expression.Operator.MULTIPLY);
4646
expr.numbers.add(new BigDecimal("5"));
4747

48-
BigDecimal result1 = expr.evaluate(false, RoundingMode.HALF_UP);
49-
assertEquals(0, result1.compareTo(new BigDecimal("35")));
48+
BigDecimal result1 = expr.evaluate(false, 8, RoundingMode.HALF_UP);
49+
assertEquals(result1, new BigDecimal("35"));
5050

51-
BigDecimal result2 = expr.evaluate(true, RoundingMode.HALF_UP);
52-
assertEquals(0, result2.compareTo(new BigDecimal("23")));
51+
BigDecimal result2 = expr.evaluate(true, 8, RoundingMode.HALF_UP);
52+
assertEquals(result2, new BigDecimal("23"));
5353
}
5454

5555
@Test
@@ -69,11 +69,22 @@ public void longExpression() {
6969
expr.operators.add(Expression.Operator.SUBTRACT);
7070
expr.numbers.add(new BigDecimal("-10"));
7171

72-
BigDecimal result1 = expr.evaluate(false, RoundingMode.HALF_UP);
73-
assertEquals(0, result1.compareTo(new BigDecimal("12.41666667")));
72+
BigDecimal result1 = expr.evaluate(false, 8, RoundingMode.HALF_UP);
73+
assertEquals(result1, new BigDecimal("12.41666667"));
7474

75-
BigDecimal result2 = expr.evaluate(true, RoundingMode.HALF_UP);
76-
assertEquals(0, result2.compareTo(new BigDecimal("12.33333333")));
75+
BigDecimal result2 = expr.evaluate(true, 8, RoundingMode.HALF_UP);
76+
assertEquals(result2, new BigDecimal("12.33333333"));
77+
}
78+
79+
@Test
80+
public void stripTrailingZeroes() {
81+
Expression expr = new Expression();
82+
expr.numbers.add(new BigDecimal("1"));
83+
expr.operators.add(Expression.Operator.DIVIDE);
84+
expr.numbers.add(new BigDecimal("8"));
85+
86+
BigDecimal result = expr.evaluate(false, 8, RoundingMode.HALF_UP);
87+
assertEquals(result, new BigDecimal("0.125"));
7788
}
7889

7990
}

0 commit comments

Comments
 (0)