Class Numbers
Object
Numbers
Static methods working with
Number objects, and a few primitive types by extension.- Since:
- 0.3
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptionstatic <N extends Number>
NCasts a number to the specified type.static booleanReturnstrueif the given number is null or NaN.narrowestClass(Class<? extends Number> c1, Class<? extends Number> c2) Returns the narrowest of the given types.narrowestClass(Number value) Returns the smallest class capable to hold the specified value.narrowestClass(Number n1, Number n2) Returns the narrowest type of two numbers.static NumbernarrowestNumber(Number value) Returns the given number wrapped in the smallest class capable to hold the specified value.static NumbernarrowestNumber(String value) Returns the smallest number capable to hold the specified value.static longReturns the value of the given number rounded to nearestlonginteger.static <T> TConverts the specified string into a value object.static <T> TvalueOfNil(Class<T> type) Returns aNaN, zero, empty ornullvalue of the given type.widestClass(Class<? extends Number> c1, Class<? extends Number> c2) Returns the widest of the given types.widestClass(Number n1, Number n2) Returns the widest type of two numbers.static <N extends Number>
NWraps the given floating-point value in aNumberof the specified class.static <N extends Number>
NWraps the given integer value in aNumberof the specified class.
-
Method Details
-
isNaN
-
round
Returns the value of the given number rounded to nearestlonginteger. This method is intended for calculations where fractional parts are rounding errors. AnArithmeticExceptionis thrown in the following cases:- If the floating point value is NaN or positive or negative infinity.
- If the value overflows the capacity of 64 bits integers.
- If the number is a
BigDecimalwith a non-zero fractional part.
BigDecimalis used when calculations should be exact in base 10. In such case, a fractional part would not be a rounding error.- Parameters:
value- the value to return as a long integer.- Returns:
- the value rounded to nearest long integer.
- Throws:
NullPointerException- if the given number isnull.ArithmeticException- if the value cannot be represented as a long integer.- Since:
- 1.4
- See Also:
-
widestClass
public static Class<? extends Number> widestClass(Number n1, Number n2) throws IllegalArgumentException Returns the widest type of two numbers. Numbersn1andn2can be instance ofByte,Short,Integer,Long,Float,Double,Fraction,BigIntegerorBigDecimaltypes.If one of the given arguments is null, then this method returns the class of the non-null argument. If both arguments are null, then this method returns
null.- Parameters:
n1- the first number, ornull.n2- the second number, ornull.- Returns:
- the widest type of the given numbers, or
nullif bothn1andn2are null. - Throws:
IllegalArgumentException- if a number is not an instance of a supported type.- See Also:
-
widestClass
public static Class<? extends Number> widestClass(Class<? extends Number> c1, Class<? extends Number> c2) throws IllegalArgumentException Returns the widest of the given types. Classesc1andc2can beByte,Short,Integer,Long,Float,Double,Fraction,BigIntegerorBigDecimaltypes.If one of the given arguments is null, then this method returns the non-null argument. If both arguments are null, then this method returns
null.Example
in the following code, the result stored intypewill beLong.class:Class<?> type = widestClass(Short.class, Long.class);Accuracy
Note that conversions to the widest class are not guaranteed to be lossless. For example,doubleis considered a wider class thanlong, but conversion fromlongtodoublecan nevertheless loose accuracy.- Parameters:
c1- the first number type, ornull.c2- the second number type, ornull.- Returns:
- the widest of the given types, or
nullif bothc1andc2are null. - Throws:
IllegalArgumentException- if one of the given types is not supported by thisNumbersclass.- See Also:
-
narrowestClass
public static Class<? extends Number> narrowestClass(Number n1, Number n2) throws IllegalArgumentException Returns the narrowest type of two numbers. Numbersn1andn2can be instance ofByte,Short,Integer,Long,Float,Double,Fraction,BigIntegerorBigDecimaltypes.If one of the given arguments is null, then this method returns the class of the non-null argument. If both arguments are null, then this method returns
null.- Parameters:
n1- the first number, ornull.n2- the second number, ornull.- Returns:
- the narrowest type of the given numbers, or
nullif bothn1andn2are null. - Throws:
IllegalArgumentException- if a number is not an instance of a supported type.- See Also:
-
narrowestClass
public static Class<? extends Number> narrowestClass(Class<? extends Number> c1, Class<? extends Number> c2) throws IllegalArgumentException Returns the narrowest of the given types. Classesc1andc2can beByte,Short,Integer,Long,Float,Double,Fraction,BigIntegerorBigDecimaltypes.If one of the given arguments is null, then this method returns the non-null argument. If both arguments are null, then this method returns
null.Example
in the following code, the result stored intypewill beShort.class:Class<?> type = narrowestClass(Short.class, Long.class);- Parameters:
c1- the first number type, ornull.c2- the second number type, ornull.- Returns:
- the narrowest of the given types, or
nullif bothc1andc2are null. - Throws:
IllegalArgumentException- if one of the given types is not supported by thisNumbersclass.- See Also:
-
narrowestClass
Returns the smallest class capable to hold the specified value. This method applies the following choices, in that order:- If the given value is
null, then this method returnsnull. - Otherwise if the given value cannot be cast from
doubleto another type without precision lost, returnDouble.class. - Otherwise if the given value cannot be cast from
floatto another type without precision lost, returnFloat.class. - Otherwise if the given value is between 0x80 and
0x7f, then this method returns
Byte.class; - Otherwise if the given value is between -32768 and
32767, then this method returns
Short.class; - Otherwise if the given value is between -2147483648 and
2147483647, then this method returns
Integer.class; - Otherwise this method returns
Long.class;
- Parameters:
value- the value to be wrapped in a finer (if possible)Number.- Returns:
- the narrowest type capable to hold the given value.
- See Also:
- If the given value is
-
narrowestNumber
Returns the given number wrapped in the smallest class capable to hold the specified value. This method is equivalent to the following code, in a slightly more efficient way:return cast(value, narrowestClass(value));- Parameters:
value- the value to be wrapped in a finer (if possible)Number.- Returns:
- the narrowest type capable to hold the given value.
- See Also:
-
narrowestNumber
Returns the smallest number capable to hold the specified value.- Parameters:
value- the value to be wrapped in aNumber.- Returns:
- the narrowest type capable to hold the given value.
- Throws:
NumberFormatException- if the given value cannot be parsed as a number.- See Also:
-
cast
public static <N extends Number> N cast(Number number, Class<N> type) throws IllegalArgumentException Casts a number to the specified type. The target type can be one ofByte,Short,Integer,Long,Float,Double,Fraction,BigIntegerorBigDecimal. This method makes the following choice:- If the given value is
nullor an instance of the given type, then it is returned unchanged. - Otherwise if the given type is
Double.class, then this method returnsDouble.valueOf(number.doubleValue()); - Otherwise if the given type is
Float.class, then this method returnsFloat.valueOf(number.floatValue()); - And likewise for all remaining known types.
widestClass(Number, Number)ornarrowestClass(Number). If nevertheless the given type is not wide enough, then the behavior depends on the implementation of the correspondingNumber.fooValue()method - typically, the value is just rounded or truncated.- Type Parameters:
N- the class to cast to.- Parameters:
number- the number to cast, ornull.type- the destination type.- Returns:
- the number cast to the given type, or
nullif the given value was null. - Throws:
IllegalArgumentException- if the given type is not supported by thisNumbersclass, or the number cannot be converted to the specified type (e.g.Double.NaNcannot be converted toBigDecimal).- See Also:
- If the given value is
-
wrap
public static <N extends Number> N wrap(double value, Class<N> type) throws IllegalArgumentException Wraps the given floating-point value in aNumberof the specified class. The given type shall be one ofByte,Short,Integer,Long,Float,Double,Fraction,BigIntegerandBigDecimalclasses. Furthermore, the given value shall be convertible to the given class without precision lost, otherwise anIllegalArgumentExceptionwill be thrown.- Type Parameters:
N- the wrapper class.- Parameters:
value- the value to wrap.type- the desired wrapper class.- Returns:
- the value wrapped in an object of the given class.
- Throws:
IllegalArgumentException- if the given type is not supported by thisNumbersclass, or if the given value cannot be wrapped in an instance of the given class without precision lost.- See Also:
-
wrap
Wraps the given integer value in aNumberof the specified class. The given type shall be one ofByte,Short,Integer,Long,Float,Double,Fraction,BigIntegerandBigDecimalclasses. Furthermore, the given value shall be convertible to the given class without precision lost, otherwise anIllegalArgumentExceptionwill be thrown.- Type Parameters:
N- the wrapper class.- Parameters:
value- the value to wrap.type- the desired wrapper class.- Returns:
- the value wrapped in an object of the given class.
- Throws:
IllegalArgumentException- if the given type is not supported by thisNumbersclass, or if the given value cannot be wrapped in an instance of the given class without precision lost.- Since:
- 0.8
- See Also:
-
valueOf
public static <T> T valueOf(String text, Class<T> type) throws IllegalArgumentException, NumberFormatException Converts the specified string into a value object. The value object can be an instance ofBigDecimal,BigInteger,Fraction,Double,Float,Long,Integer,Short,Byte,Boolean,CharacterorStringaccording the specified type. This method makes the following choice:- If the given type is
Double.class, then this method returnsDouble.valueOf(value); - If the given type is
Float.class, then this method returnsFloat.valueOf(value); - And likewise for all remaining known types.
- Type Parameters:
T- the requested type.- Parameters:
text- the text to parse.type- the requested type.- Returns:
- the value object, or
nullifvaluewas null. - Throws:
IllegalArgumentException- iftypeis not a recognized type.NumberFormatException- iftypeis a subclass ofNumberand the string value is not parsable as a number of the specified type.- See Also:
- If the given type is
-
valueOfNil
Returns aNaN, zero, empty ornullvalue of the given type. This method tries to return the closest value that can be interpreted asnone
, which is usually not the same aszero
. More specifically:- If the given type is a floating point primitive type (
floatordouble), then this method returnsFloat.NaNorDouble.NaNdepending on the given type. - If the given type is an integer primitive type or the character type
(
long,int,short,byteorchar), then this method returns the zero value of the given type. - If the given type is the
booleanprimitive type, then this method returnsBoolean.FALSE. - If the given type is an array or a collection, then this method returns an empty array or collection. The given type is honored on a best effort basis.
- For all other cases, including the wrapper classes of primitive types, this method
returns
null.
Numbersclass, the scope of this method has been extended to array and collection types because those objects can also be seen as mathematical concepts.- Type Parameters:
T- the compile-time type of the requested object.- Parameters:
type- the type of the object for which to get a nil value.- Returns:
- an object of the given type which represents a nil value, or
null. - See Also:
- If the given type is a floating point primitive type (
-