static Object math(Object left, Object right, EvaluationContext ctx, BinaryOperator<BigDecimal> op) {
        BigDecimal l = left instanceof String ? null : NumberEvalHelper.getBigDecimalOrNull(left);
        BigDecimal r = right instanceof String ? null : NumberEvalHelper.getBigDecimalOrNull(right);
        if (l == null || r == null) {
            return null;
        }
        try {
            return op.apply(l, r);
        } catch (ArithmeticException e) {
            // happens in cases like division by 0
            ctx.notifyEvt(() -> new InvalidParametersEvent(FEELEvent.Severity.ERROR, Msg.createMessage(Msg.GENERAL_ARITHMETIC_EXCEPTION, e.getMessage())));
            return null;
        }
    }
@Test
    void math_NumberAndString() {
        final Random rnd = new Random();
        MATH_OPERATORS.forEach(operator -> {
            BigDecimal left = BigDecimal.valueOf(rnd.nextDouble());
            String right = String.valueOf(rnd.nextDouble());
            Object retrieved = math(left, right, null, operator);
            assertThat(retrieved).isNull();
        });
    }