@Override public Object apply(TypeConverter converter, Object o1, Object o2) { return NumberOperations.add(converter, o1, o2); } @Override public String toString() { return "+"; }
@Override public Object apply(TypeConverter converter, Object o1, Object o2) { return NumberOperations.div(converter, o1, o2); } @Override public String toString() { return "/"; }
private static final boolean isFloatOrDoubleOrDotEe(Object value) { return isFloatOrDouble(value) || isDotEe(value); }
private static final boolean isBigDecimalOrFloatOrDoubleOrDotEe(Object value) { return value instanceof BigDecimal || isFloatOrDoubleOrDotEe(value); }
private final static boolean isDotEe(Object value) { return value instanceof String && isDotEe((String)value); }
public static final Number div(TypeConverter converter, Object o1, Object o2) { if (o1 == null && o2 == null) { return LONG_ZERO; } if (isBigDecimalOrBigInteger(o1) || isBigDecimalOrBigInteger(o2)) { return converter.convert(o1, BigDecimal.class).divide(converter.convert(o2, BigDecimal.class), BigDecimal.ROUND_HALF_UP); } return converter.convert(o1, Double.class) / converter.convert(o2, Double.class); }
public static final Number mod(TypeConverter converter, Object o1, Object o2) { if (o1 == null && o2 == null) { return LONG_ZERO; } if (isBigDecimalOrFloatOrDoubleOrDotEe(o1) || isBigDecimalOrFloatOrDoubleOrDotEe(o2)) { return converter.convert(o1, Double.class) % converter.convert(o2, Double.class); } if (o1 instanceof BigInteger || o2 instanceof BigInteger) { return converter.convert(o1, BigInteger.class).remainder(converter.convert(o2, BigInteger.class)); } return converter.convert(o1, Long.class) % converter.convert(o2, Long.class); }
@Override public Object apply(TypeConverter converter, Object o1, Object o2) { return NumberOperations.mul(converter, o1, o2); } @Override public String toString() { return "*"; }
@Override public Object apply(TypeConverter converter, Object o) { return NumberOperations.neg(converter, o); } @Override public String toString() { return "-"; }
@Override public Object apply(TypeConverter converter, Object o1, Object o2) { return NumberOperations.mod(converter, o1, o2); } @Override public String toString() { return "%"; }
private static final boolean isBigDecimalOrFloatOrDoubleOrDotEe(Object value) { return value instanceof BigDecimal || isFloatOrDoubleOrDotEe(value); }
private final static boolean isDotEe(Object value) { return value instanceof String && isDotEe((String)value); }
public static final Number div(TypeConverter converter, Object o1, Object o2) { if (o1 == null && o2 == null) { return LONG_ZERO; } if (isBigDecimalOrBigInteger(o1) || isBigDecimalOrBigInteger(o2)) { return converter.convert(o1, BigDecimal.class).divide(converter.convert(o2, BigDecimal.class), BigDecimal.ROUND_HALF_UP); } return converter.convert(o1, Double.class) / converter.convert(o2, Double.class); }
public static final Number mod(TypeConverter converter, Object o1, Object o2) { if (o1 == null && o2 == null) { return LONG_ZERO; } if (isBigDecimalOrFloatOrDoubleOrDotEe(o1) || isBigDecimalOrFloatOrDoubleOrDotEe(o2)) { return converter.convert(o1, Double.class) % converter.convert(o2, Double.class); } if (o1 instanceof BigInteger || o2 instanceof BigInteger) { return converter.convert(o1, BigInteger.class).remainder(converter.convert(o2, BigInteger.class)); } return converter.convert(o1, Long.class) % converter.convert(o2, Long.class); }
@Override public Object apply(TypeConverter converter, Object o1, Object o2) { return NumberOperations.mul(converter, o1, o2); } @Override public String toString() { return "*"; }
@Override public Object apply(TypeConverter converter, Object o) { return NumberOperations.neg(converter, o); } @Override public String toString() { return "-"; }
@Override public Object apply(TypeConverter converter, Object o1, Object o2) { return NumberOperations.mod(converter, o1, o2); } @Override public String toString() { return "%"; }
private static final boolean isFloatOrDoubleOrDotEe(Object value) { return isFloatOrDouble(value) || isDotEe(value); }
public static final Number sub(TypeConverter converter, Object o1, Object o2) { if (o1 == null && o2 == null) { return LONG_ZERO; } if (o1 instanceof BigDecimal || o2 instanceof BigDecimal) { return converter.convert(o1, BigDecimal.class).subtract(converter.convert(o2, BigDecimal.class)); } if (isFloatOrDoubleOrDotEe(o1) || isFloatOrDoubleOrDotEe(o2)) { if (o1 instanceof BigInteger || o2 instanceof BigInteger) { return converter.convert(o1, BigDecimal.class).subtract(converter.convert(o2, BigDecimal.class)); } return converter.convert(o1, Double.class) - converter.convert(o2, Double.class); } if (o1 instanceof BigInteger || o2 instanceof BigInteger) { return converter.convert(o1, BigInteger.class).subtract(converter.convert(o2, BigInteger.class)); } return converter.convert(o1, Long.class) - converter.convert(o2, Long.class); }
if (isDotEe((String)value)) { return Double.valueOf(-converter.convert(value, Double.class).doubleValue());