Fix division by zero (check bigDecimal.compareto, not equals 0)

This commit is contained in:
2023-03-09 18:19:02 -06:00
parent bfe138c018
commit ad8ed4c574
2 changed files with 9 additions and 2 deletions

View File

@ -185,7 +185,7 @@ public class FormulaInterpreter
case "DIVIDE":
{
List<BigDecimal> numbers = getNumberArgumentList(args, 2, variableInterpreter);
if(numbers.get(1) == null || numbers.get(1).equals(BigDecimal.ZERO))
if(numbers.get(1) == null || numbers.get(1).compareTo(BigDecimal.ZERO) == 0)
{
return null;
}
@ -194,7 +194,7 @@ public class FormulaInterpreter
case "DIVIDE_SCALE":
{
List<BigDecimal> numbers = getNumberArgumentList(args, 3, variableInterpreter);
if(numbers.get(1) == null || numbers.get(1).equals(BigDecimal.ZERO))
if(numbers.get(1) == null || numbers.get(1).compareTo(BigDecimal.ZERO) == 0)
{
return null;
}

View File

@ -118,7 +118,14 @@ class FormulaInterpreterTest extends BaseTest
assertEquals(new BigDecimal("34.500"), interpretFormula(vi, "MULTIPLY(100,0.345)"));
assertThat((BigDecimal) interpretFormula(vi, "DIVIDE(1,2)")).isCloseTo(new BigDecimal("0.5"), ZERO_OFFSET);
assertThat((BigDecimal) interpretFormula(vi, "DIVIDE_SCALE(1,2,0)")).isEqualTo(new BigDecimal("1"));
assertThat((BigDecimal) interpretFormula(vi, "DIVIDE_SCALE(1,2,0)")).isEqualTo(new BigDecimal("1"));
assertThat((BigDecimal) interpretFormula(vi, "DIVIDE_SCALE(1,2,3)")).isEqualTo(new BigDecimal("0.500"));
assertThat((BigDecimal) interpretFormula(vi, "DIVIDE_SCALE(1,2,4)")).isEqualTo(new BigDecimal("0.5000"));
assertNull(interpretFormula(vi, "DIVIDE(1,0)"));
assertNull(interpretFormula(vi, "DIVIDE(1,0.0)"));
assertNull(interpretFormula(vi, "DIVIDE_SCALE(1,0,0)"));
assertNull(interpretFormula(vi, "DIVIDE_SCALE(1,0.0,1)"));
assertEquals(new BigDecimal("0.5"), interpretFormula(vi, "ROUND(0.510,1)"));
assertEquals(new BigDecimal("5.0"), interpretFormula(vi, "ROUND(5.010,2)"));