mirror of
https://github.com/Kingsrook/qqq.git
synced 2025-07-18 13:10:44 +00:00
Fix division by zero (check bigDecimal.compareto, not equals 0)
This commit is contained in:
@ -185,7 +185,7 @@ public class FormulaInterpreter
|
|||||||
case "DIVIDE":
|
case "DIVIDE":
|
||||||
{
|
{
|
||||||
List<BigDecimal> numbers = getNumberArgumentList(args, 2, variableInterpreter);
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
@ -194,7 +194,7 @@ public class FormulaInterpreter
|
|||||||
case "DIVIDE_SCALE":
|
case "DIVIDE_SCALE":
|
||||||
{
|
{
|
||||||
List<BigDecimal> numbers = getNumberArgumentList(args, 3, variableInterpreter);
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -118,7 +118,14 @@ class FormulaInterpreterTest extends BaseTest
|
|||||||
assertEquals(new BigDecimal("34.500"), interpretFormula(vi, "MULTIPLY(100,0.345)"));
|
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(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)"));
|
||||||
|
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("0.5"), interpretFormula(vi, "ROUND(0.510,1)"));
|
||||||
assertEquals(new BigDecimal("5.0"), interpretFormula(vi, "ROUND(5.010,2)"));
|
assertEquals(new BigDecimal("5.0"), interpretFormula(vi, "ROUND(5.010,2)"));
|
||||||
|
Reference in New Issue
Block a user