From 755263e79a1e84fd154a0a4bbe6e3dd9b08d379e Mon Sep 17 00:00:00 2001 From: Jagdish Singh Bisht Date: Sat, 3 Jan 2026 07:53:29 +0530 Subject: [PATCH 1/2] LANG-1806: Allow floating-point suffixes in NumberUtils.isParsableDecimal --- .../java/org/apache/commons/lang3/math/NumberUtils.java | 7 +++++++ .../org/apache/commons/lang3/math/NumberUtilsTest.java | 6 ++++-- 2 files changed, 11 insertions(+), 2 deletions(-) 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 77682188bd2..8b0de236e53 100644 --- a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java +++ b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java @@ -753,8 +753,15 @@ private static boolean isParsableDecimal(final String str, final int beginIdx) { // See https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-NonZeroDigit int decimalPoints = 0; boolean asciiNumeric = true; + final int lastIndex = str.length() - 1; + for (int i = beginIdx; i < str.length(); i++) { final char ch = str.charAt(i); + + if(i == lastIndex && (ch == 'f' || ch == 'F' || ch == 'd' || ch == 'D')){ + return true; + } + final boolean isDecimalPoint = ch == '.'; if (isDecimalPoint) { decimalPoints++; 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 528039c9cf6..3529e5b0eac 100644 --- a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java @@ -1028,12 +1028,14 @@ void testIsParsable() { assertTrue(NumberUtils.isParsable("-018.2")); assertTrue(NumberUtils.isParsable("-.236")); assertTrue(NumberUtils.isParsable("2.")); - // TODO assertTrue(NumberUtils.isParsable("2.f")); - // TODO assertTrue(NumberUtils.isParsable("2.d")); + + assertTrue(NumberUtils.isParsable("2.f")); + assertTrue(NumberUtils.isParsable("2.d")); // Float.parseFloat("1.2e-5f") // TODO assertTrue(NumberUtils.isParsable("1.2e-5f")); // Double.parseDouble("1.2e-5d") // TODO assertTrue(NumberUtils.isParsable("1.2e-5d")); + } /** From 5e483117eda46079e4c2cc7fb48b61223211c494 Mon Sep 17 00:00:00 2001 From: Jagdish Singh Bisht Date: Sat, 3 Jan 2026 08:44:42 +0530 Subject: [PATCH 2/2] LANG-1806: Remove extra blank lines --- src/main/java/org/apache/commons/lang3/math/NumberUtils.java | 3 --- .../java/org/apache/commons/lang3/math/NumberUtilsTest.java | 2 -- 2 files changed, 5 deletions(-) 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 8b0de236e53..d291e083ffa 100644 --- a/src/main/java/org/apache/commons/lang3/math/NumberUtils.java +++ b/src/main/java/org/apache/commons/lang3/math/NumberUtils.java @@ -754,14 +754,11 @@ private static boolean isParsableDecimal(final String str, final int beginIdx) { int decimalPoints = 0; boolean asciiNumeric = true; final int lastIndex = str.length() - 1; - for (int i = beginIdx; i < str.length(); i++) { final char ch = str.charAt(i); - if(i == lastIndex && (ch == 'f' || ch == 'F' || ch == 'd' || ch == 'D')){ return true; } - final boolean isDecimalPoint = ch == '.'; if (isDecimalPoint) { decimalPoints++; 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 3529e5b0eac..423adebfb69 100644 --- a/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/math/NumberUtilsTest.java @@ -1028,14 +1028,12 @@ void testIsParsable() { assertTrue(NumberUtils.isParsable("-018.2")); assertTrue(NumberUtils.isParsable("-.236")); assertTrue(NumberUtils.isParsable("2.")); - assertTrue(NumberUtils.isParsable("2.f")); assertTrue(NumberUtils.isParsable("2.d")); // Float.parseFloat("1.2e-5f") // TODO assertTrue(NumberUtils.isParsable("1.2e-5f")); // Double.parseDouble("1.2e-5d") // TODO assertTrue(NumberUtils.isParsable("1.2e-5d")); - } /**