diff --git a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java index 02a6069b321..244715e1dee 100644 --- a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java +++ b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java @@ -1847,4 +1847,24 @@ public static int compare(final short x, final short y) { public static int compare(final byte x, final byte y) { return x - y; } + + /** + * Checks whether the specified {@link Number} is {@code null} or {@code 0} as value. + * + * @param number the {@code number} to check + * @return {@code true} if the Object of {@code number} is {@code null} or has the value {@code 0}. + */ + public static boolean isNullOrZero(Number number) { + return null == number || number.doubleValue() == 0.0d; + } + + /** + * Checks whether the specified {@link Number} is not {@code null} and is unlike {@code 0} as value. + * + * @param number number the {@code number} to check + * @return {@code true} is the Object of {@code number} is not {@code null} and has a value unlike {@code 0} + */ + public static boolean isNoneNullOrZero(Number number) { + return ! isNullOrZero(number); + } } diff --git a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java index 2a01fab163c..300bfca87a7 100644 --- a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java @@ -1743,4 +1743,96 @@ public void testToShortStringI() { assertEquals(12345, NumberUtils.toShort("12345", (short) 5), "toShort(String, short) 1 failed"); assertEquals(5, NumberUtils.toShort("1234.5", (short) 5), "toShort(String, short) 2 failed"); } + + /** + * Test for {@link NumberUtils#isNullOrZero(Number)} + */ + @Test + public void testIsNullOrZero() { + String errorMessageNullShouldTrue = "A null Object should return true on isNullOrZero(Number)"; + String errorMessageZeroShouldTrue = "A zero Value of Number should return true on isNullOrZero(Number)"; + String errorMessageNonZeroShouldFalse = "A non zero Value should return false on isNullOrZero(Number)"; + + assertTrue(NumberUtils.isNullOrZero((BigDecimal) null), + BigDecimal.class.getSimpleName() + " - " + errorMessageNullShouldTrue); + assertTrue(NumberUtils.isNullOrZero(BigDecimal.ZERO), + BigDecimal.class.getSimpleName() + " - " + errorMessageZeroShouldTrue); + assertTrue(NumberUtils.isNullOrZero(BigDecimal.valueOf(0.00d)), + BigDecimal.class.getSimpleName() + " - " + errorMessageZeroShouldTrue); + assertTrue(NumberUtils.isNullOrZero((Integer) null), + Integer.class.getSimpleName() + " - " + errorMessageNullShouldTrue); + assertTrue(NumberUtils.isNullOrZero(NumberUtils.INTEGER_ZERO), + Integer.class.getSimpleName() + " - " + errorMessageZeroShouldTrue); + assertTrue(NumberUtils.isNullOrZero((Float) null), + Float.class.getSimpleName() + " - " + errorMessageNullShouldTrue); + assertTrue(NumberUtils.isNullOrZero(NumberUtils.FLOAT_ZERO), + Float.class.getSimpleName() + " - " + errorMessageZeroShouldTrue); + assertTrue(NumberUtils.isNullOrZero((Double) null), + Double.class.getSimpleName() + " - " + errorMessageNullShouldTrue); + assertTrue(NumberUtils.isNullOrZero(NumberUtils.DOUBLE_ZERO), + Double.class.getSimpleName() + " - " + errorMessageZeroShouldTrue); + + assertFalse(NumberUtils.isNullOrZero(BigDecimal.ONE), + BigDecimal.class.getSimpleName() + " - " + errorMessageNonZeroShouldFalse); + assertFalse(NumberUtils.isNullOrZero(BigDecimal.valueOf(0.0025)), + BigDecimal.class.getSimpleName() + " - " + errorMessageNonZeroShouldFalse); + assertFalse(NumberUtils.isNullOrZero(NumberUtils.INTEGER_ONE), + Integer.class.getSimpleName() + " - " + errorMessageNonZeroShouldFalse); + assertFalse(NumberUtils.isNullOrZero(NumberUtils.toInt("236")), + Integer.class.getSimpleName() + " - " + errorMessageNonZeroShouldFalse); + assertFalse(NumberUtils.isNullOrZero(NumberUtils.FLOAT_MINUS_ONE), + Float.class.getSimpleName() + " - " + errorMessageNonZeroShouldFalse); + assertFalse(NumberUtils.isNullOrZero(2.4685f), + Float.class.getSimpleName() + " - " + errorMessageNonZeroShouldFalse); + assertFalse(NumberUtils.isNullOrZero(NumberUtils.DOUBLE_ONE), + Double.class.getSimpleName() + " - " + errorMessageNonZeroShouldFalse); + assertFalse(NumberUtils.isNullOrZero(NumberUtils.toDouble("-45.6382")), + Double.class.getSimpleName() + " - " + errorMessageNonZeroShouldFalse); + } + + /** + * Test for {@link NumberUtils#isNoneNullOrZero(Number)} + */ + @Test + public void testIsNoneNullOrZero() { + String errorMessageNullShouldFalse = "A null Object should return false on isNoneNullOrZero(Number)"; + String errorMessageZeroShouldFalse = "A zero Value of Number should return false on isNoneNullOrZero(Number)"; + String errorMessageNonZeroShouldTrue = "A non zero Value should return true on isNoneNullOrZero(Number)"; + + assertFalse(NumberUtils.isNoneNullOrZero((BigDecimal) null), + BigDecimal.class.getSimpleName() + " - " + errorMessageNullShouldFalse); + assertFalse(NumberUtils.isNoneNullOrZero(BigDecimal.ZERO), + BigDecimal.class.getSimpleName() + " - " + errorMessageZeroShouldFalse); + assertFalse(NumberUtils.isNoneNullOrZero(BigDecimal.valueOf(0.00d)), + BigDecimal.class.getSimpleName() + " - " + errorMessageZeroShouldFalse); + assertFalse(NumberUtils.isNoneNullOrZero((Integer) null), + Integer.class.getSimpleName() + " - " + errorMessageNullShouldFalse); + assertFalse(NumberUtils.isNoneNullOrZero(NumberUtils.INTEGER_ZERO), + Integer.class.getSimpleName() + " - " + errorMessageZeroShouldFalse); + assertFalse(NumberUtils.isNoneNullOrZero((Float) null), + Float.class.getSimpleName() + " - " + errorMessageNullShouldFalse); + assertFalse(NumberUtils.isNoneNullOrZero(NumberUtils.FLOAT_ZERO), + Float.class.getSimpleName() + " - " + errorMessageZeroShouldFalse); + assertFalse(NumberUtils.isNoneNullOrZero((Double) null), + Double.class.getSimpleName() + " - " + errorMessageNullShouldFalse); + assertFalse(NumberUtils.isNoneNullOrZero(NumberUtils.DOUBLE_ZERO), + Double.class.getSimpleName() + " - " + errorMessageZeroShouldFalse); + + assertTrue(NumberUtils.isNoneNullOrZero(BigDecimal.ONE), + BigDecimal.class.getSimpleName() + " - " + errorMessageNonZeroShouldTrue); + assertTrue(NumberUtils.isNoneNullOrZero(BigDecimal.valueOf(0.0025)), + BigDecimal.class.getSimpleName() + " - " + errorMessageNonZeroShouldTrue); + assertTrue(NumberUtils.isNoneNullOrZero(NumberUtils.INTEGER_ONE), + Integer.class.getSimpleName() + " - " + errorMessageNonZeroShouldTrue); + assertTrue(NumberUtils.isNoneNullOrZero(NumberUtils.toInt("236")), + Integer.class.getSimpleName() + " - " + errorMessageNonZeroShouldTrue); + assertTrue(NumberUtils.isNoneNullOrZero(NumberUtils.FLOAT_MINUS_ONE), + Float.class.getSimpleName() + " - " + errorMessageNonZeroShouldTrue); + assertTrue(NumberUtils.isNoneNullOrZero(2.4685f), + Float.class.getSimpleName() + " - " + errorMessageNonZeroShouldTrue); + assertTrue(NumberUtils.isNoneNullOrZero(NumberUtils.DOUBLE_ONE), + Double.class.getSimpleName() + " - " + errorMessageNonZeroShouldTrue); + assertTrue(NumberUtils.isNoneNullOrZero(NumberUtils.toDouble("-45.6382")), + Double.class.getSimpleName() + " - " + errorMessageNonZeroShouldTrue); + } }