protected BigDecimal coerceToBigDecimal(Object value) {
		if (value == null || "".equals(value)) {
			return BigDecimal.valueOf(0l);
		}
		if (value instanceof BigDecimal) {
			return (BigDecimal)value;
		}
		if (value instanceof BigInteger) {
			return new BigDecimal((BigInteger)value);
		}
		if (value instanceof Number) {
			return new BigDecimal(((Number)value).doubleValue());
		}
		if (value instanceof String) {
			try {
				return new BigDecimal((String)value);
			} catch (NumberFormatException e) {
				throw new ELException(LocalMessages.get("error.coerce.value", value, value.getClass(), BigDecimal.class));
			}
		}
		if (value instanceof Character) {
			return new BigDecimal((short)((Character)value).charValue());
		}
		throw new ELException(LocalMessages.get("error.coerce.type", value, value.getClass(), BigDecimal.class));
	}