in src/main/java/org/apache/commons/jexl3/JexlArithmetic.java [666:701]
public BigDecimal toBigDecimal(final Object val) {
if (val instanceof BigDecimal) {
return roundBigDecimal((BigDecimal) val);
}
if (val instanceof Double) {
if (Double.isNaN(((Double) val))) {
return BigDecimal.ZERO;
}
return roundBigDecimal(new BigDecimal(val.toString(), getMathContext()));
}
if (val instanceof Number) {
return roundBigDecimal(new BigDecimal(val.toString(), getMathContext()));
}
if (val instanceof Boolean) {
return BigDecimal.valueOf(((Boolean) val) ? 1. : 0.);
}
if (val instanceof AtomicBoolean) {
return BigDecimal.valueOf(((AtomicBoolean) val).get() ? 1L : 0L);
}
if (val instanceof String) {
final String string = (String) val;
if ("".equals(string)) {
return BigDecimal.ZERO;
}
return roundBigDecimal(new BigDecimal(string, getMathContext()));
}
if (val instanceof Character) {
final int i = ((Character) val);
return new BigDecimal(i);
}
if (val == null) {
return controlNullOperand(strict, BigDecimal.ZERO);
}
throw new ArithmeticException("BigDecimal coercion: "
+ val.getClass().getName() + ":(" + val + ")");
}