/*
* Copyright Javelin Software, All rights reserved.
*/
import java.math.*;
/**
* The NumberUtil is used as a Utility Class for Numbers
* classes such as Integers and Doubles etc.
*
* @author Robin Sharp
*/
public class NumberUtil
{
/**
* Returns the BigDecimal value n with trailing
* zeroes removed.
*/
public static BigDecimal trim(BigDecimal n)
{
try
{
while (true)
{
n = n.setScale(n.scale()-1);
}
}
catch (ArithmeticException e)
{
// no more trailing zeroes so exit.
}
return n;
}
/**
* Returns the BigDecimal value n with exactly
* 'prec' decimal places.
* Zeroes are padded to the right of the decimal
* point if necessary.
*/
public static BigDecimal format(BigDecimal n, int prec)
{
return n.setScale(prec, BigDecimal.ROUND_HALF_UP);
}
/**
* Convert an Object of type Class to a Number.
*/
public static Object toObject( Class clazz, Object value )
{
if( value == null ) return null;
if( clazz == null ) return value;
if( Boolean.class.isAssignableFrom( clazz ) ) return toBoolean( value );
if( Byte.class.isAssignableFrom( clazz ) ) return toByte( value );
if( Short.class.isAssignableFrom( clazz ) ) return toShort( value );
if( Integer.class.isAssignableFrom( clazz ) ) return toInteger( value );
if( Long.class.isAssignableFrom( clazz ) ) return toLong( value );
if( Float.class.isAssignableFrom( clazz ) ) return toFloat( value );
if( Double.class.isAssignableFrom( clazz ) ) return toDouble( value );
if( BigInteger.class.isAssignableFrom( clazz ) ) return toBigInteger( value );
if( BigDecimal.class.isAssignableFrom( clazz ) ) return toBigDecimal( value );
return value;
}
/**
* Convert a Sting 'TRUE' to 1, otherwise 0.
*/
public static int valueOfBoolean( String string )
{
return string != null && "TRUE".equalsIgnoreCase( string ) ? 1 : 0;
}
/**
* Optimisation Code
*/
public static Boolean getBoolean( boolean bool )
{
return bool ? Boolean.TRUE : Boolean.FALSE;
}
/**
* Convert an Object to a Boolean.
*/
public static Boolean toBoolean( Object value )
{
if( value == null ) return null;
if( value instanceof Boolean ) return (Boolean)value;
if( "TRUE".equalsIgnoreCase( value.toString() ) ) return Boolean.TRUE;
if( "".equals( value.toString() ) ) return null;
return Boolean.FALSE;
}
/**
* Convert an Object to an Integer.
*/
public static Integer toInteger( Object value )
{
if( value == null ) return null;
if( value instanceof Integer ) return (Integer)value;
if( value instanceof String )
{
if( "".equals( (String)value ) ) return null;
return new Integer( (String)value );
}
if( value instanceof Number ) return new Integer( ((Number)value).intValue() );
return new Integer( value.toString() );
}
/**
* Convert an Object to a Long.
*/
public static Long toLong( Object value )
{
if( value == null ) return null;
if( value instanceof Long ) return (Long)value;
if( value instanceof String )
{
if( "".equals( (String)value ) ) return null;
return new Long( (String)value );
}
if( value instanceof Number ) return new Long( ((Number)value).shortValue() );
return new Long( value.toString() );
}
/**
* Convert an Object to a Short.
*/
public static Short toShort( Object value )
{
if( value == null ) return null;
if( value instanceof Short ) return (Short)value;
if( value instanceof String )
{
if( "".equals( (String)value ) ) return null;
return new Short( (String)value );
}
if( value instanceof Number ) return new Short( ((Number)value).shortValue() );
return new Short( value.toString() );
}
/**
* Convert an Object to a Byte.
*/
public static Byte toByte( Object value )
{
if( value == null ) return null;
if( value instanceof Byte ) return (Byte)value;
if( value instanceof String )
{
if( "".equals( (String)value ) ) return null;
return new Byte( (String)value );
}
if( value instanceof Number ) return new Byte( ((Number)value).byteValue() );
return new Byte( value.toString() );
}
/**
* Convert an Object to a Float.
*/
public static Float toFloat( Object value )
{
if( value == null ) return null;
if( value instanceof Float ) return (Float)value;
if( value instanceof String )
{
if( "".equals( (String)value ) ) return null;
return new Float( (String)value );
}
if( value instanceof Number ) return new Float( ((Number)value).floatValue() );
return new Float( value.toString() );
}
/**
* Convert an Object to a Double.
*/
public static Double toDouble( Object value )
{
if( value == null ) return null;
if( value instanceof Double ) return (Double)value;
if( value instanceof String )
{
if( "".equals( (String)value ) ) return null;
return new Double( (String)value );
}
if( value instanceof Number ) return new Double( ((Number)value).doubleValue() );
return new Double( value.toString() );
}
/**
* Convert an Object to a BigInteger.
*/
public static BigInteger toBigInteger( Object value )
{
if( value == null ) return null;
if( value instanceof BigInteger ) return (BigInteger)value;
if( value instanceof String )
{
if( "".equals( (String)value ) ) return null;
return new BigInteger( (String)value );
}
return new BigInteger( value.toString() );
}
/**
* Convert an Object to a BigDecimal.
*/
public static BigDecimal toBigDecimal( Object value )
{
if( value == null ) return null;
if( value instanceof BigDecimal ) return (BigDecimal)value;
if( value instanceof String )
{
if( "".equals( (String)value ) ) return null;
return new BigDecimal( (String)value );
}
if( value instanceof Number ) return new BigDecimal( ((Number)value).doubleValue() );
return new BigDecimal( value.toString() );
}
/**
* Convert an Object to a Boolean.
*/
public static boolean booleanValue( Object value )
{
if( value == null ) return false;
if( value instanceof Boolean ) return ((Boolean)value).booleanValue();
if( value instanceof Number ) return ((Number)value).intValue() != 0;
return "TRUE".equalsIgnoreCase( value.toString() );
}
/**
* Convert an Object to an int, or 0 if it is null.
*/
public static int intValue( Object value )
{
if( value == null ) return 0;
return toInteger( value ).intValue();
}
/**
* Convert an Object to a long, or 0 if it is null.
*/
public static long longValue( Object value )
{
if( value == null ) return 0L;
return toLong( value ).longValue();
}
/**
* Convert an Object to a short, or 0 if it is null.
*/
public static short shortValue( Object value )
{
if( value == null ) return 0;
return toShort( value ).shortValue();
}
/**
* Convert an Object to a byte, or 0 if it is null.
*/
public static byte byteValue( Object value )
{
if( value == null ) return 0;
return toByte( value ).byteValue();
}
/**
* Convert an Object to a float, or 0 if it is null.
*/
public static float floatValue( Object value )
{
if( value == null ) return 0.0f;
return toFloat( value ).floatValue();
}
/**
* Convert an Object to a double, or 0 if it is null.
*/
public static double doubleValue( Object value )
{
if( value == null ) return 0.0;
return toDouble( value ).doubleValue();
}
}