return ((BigDecimal) number).toBigInteger();
}
if (number instanceof BigInteger) {
- return new BigInteger(number.toString());
+ return number;
}
return BigInteger.valueOf(number.longValue());
}
if (BigDecimal.class.equals(type)) {
if (number instanceof BigDecimal) {
- return new BigDecimal(number.toString());
+ return number;
}
if (number instanceof BigInteger) {
return new BigDecimal((BigInteger) number);
}
- return new BigDecimal(number.doubleValue());
+ return new BigDecimal(number.toString());
}
if (Byte.TYPE == type || Byte.class.equals(type)) {
return new Byte(number.byteValue());
public final static Object coerceToType(final Object obj, final Class type)
throws IllegalArgumentException {
if (type == null || Object.class.equals(type) ||
- (obj != null && type.equals(obj.getClass()))) {
+ (obj != null && type.isAssignableFrom(obj.getClass()))) {
return obj;
}
if (String.class.equals(type)) {
if (Boolean.class.equals(type) || Boolean.TYPE == type) {
return coerceToBoolean(obj);
}
- if (obj != null && type.isAssignableFrom(obj.getClass())) {
- return obj;
- }
if (type.isEnum()) {
return coerceToEnum(obj, type);
}
testIsSame(Float.valueOf(0.123456F));
}
+ public void testCoerceIntegerToNumber() {
+ Integer input = 4390241;
+ Object output = ELSupport.coerceToType(input, Number.class);
+ assertEquals(input, output);
+ }
+
private static void testIsSame(Object value) {
assertEquals(value, ELSupport.coerceToNumber(value, value.getClass()));
}