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..d291e083ffa 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,12 @@ 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..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,8 +1028,8 @@ 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")