package com.revolsys.util.number; import com.revolsys.datatype.AbstractDataType; import com.revolsys.datatype.DataTypes; import com.revolsys.util.DoubleFormatUtil; import com.revolsys.util.MathUtil; import com.revolsys.util.Property; public class Floats extends AbstractDataType { public static float add(final float left, final Number right) { return left + right.floatValue(); } public static float divide(final float left, final Number right) { return left / right.floatValue(); } public static boolean equal(final float number1, final float number2) { if (Float.isNaN(number1)) { return Float.isNaN(number2); } else if (Float.isInfinite(number1)) { return Float.isInfinite(number2); } else { if (Float.compare(number1, number2) == 0) { return true; } else { return false; } } } public static boolean equal(final Object number1, final Object number2) { return equal((float)number1, (float)number2); } public static float mod(final float left, final Number right) { return left % right.floatValue(); } public static float multiply(final float left, final Number right) { return left * right.floatValue(); } public static boolean overlaps(final float min1, final float max1, final float min2, final float max2) { if (min1 > max1) { return overlaps(max1, min1, min2, max2); } else if (min2 > max2) { return overlaps(min1, max1, max2, min2); } else { if (min1 <= max2 && min2 <= max1) { return true; } else { return false; } } } public static float subtract(final float left, final Number right) { return left - right.floatValue(); } public static Float toFloat(final Object value) { try { return toValid(value); } catch (final Throwable e) { return null; } } public static Float toFloat(final String value) { try { return toValid(value); } catch (final Throwable e) { return null; } } public static String toString(final float number) { final StringBuilder string = new StringBuilder(); MathUtil.append(string, number); return string.toString(); } public static String toString(final float number, final int precision) { final StringBuilder string = new StringBuilder(); DoubleFormatUtil.formatDoublePrecise(number, precision, precision, string); return string.toString(); } /** * Convert the value to a Float. If the value cannot be converted to a number * an exception is thrown */ public static Float toValid(final Object value) { if (value == null) { return null; } else if (value instanceof Number) { final Number number = (Number)value; return number.floatValue(); } else { final String string = value.toString(); return toValid(string); } } /** * Convert the value to a Float. If the value cannot be converted to a number and exception is thrown. */ public static Float toValid(final String string) { if (Property.hasValue(string)) { return Float.valueOf(string); } else { return null; } } public Floats() { super("float", Float.class, false); } @Override protected boolean equalsNotNull(final Object value1, final Object value2) { return equal((float)value1, (float)value2); } @Override protected Object toObjectDo(final Object value) { if (value instanceof Number) { final Number number = (Number)value; return number.floatValue(); } else { final String string = DataTypes.toString(value); if (Property.hasValue(string)) { return Float.valueOf(string); } else { return null; } } } @Override protected String toStringDo(final Object value) { return toString((float)value); } }