commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Henri Yandell (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LANG-997) NumberUtil#isNumber() returns false for "012345678" but not for "12345678"
Date Sat, 26 Apr 2014 04:04:16 GMT

    [ https://issues.apache.org/jira/browse/LANG-997?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13981869#comment-13981869
] 

Henri Yandell commented on LANG-997:
------------------------------------

Summarizing - the issue isn't that 0123 is bad, but that 012345678901234567 is too big for
Java.

In the same way, 0xfffffffffffffffffffffffffffffffffff should return false. It currently returns
true.
Also 9e99999999999999999999 is too large, but returns true currently.

I'm +1 to considering this a regression and accepting an isNumber that can handle numbers
larger than Java is prepared to handle. ie) Fixing this bug.

> NumberUtil#isNumber() returns false for "012345678" but not for "12345678"
> --------------------------------------------------------------------------
>
>                 Key: LANG-997
>                 URL: https://issues.apache.org/jira/browse/LANG-997
>             Project: Commons Lang
>          Issue Type: Bug
>          Components: lang.math.*
>    Affects Versions: 3.3.2
>         Environment: Java 6
>            Reporter: Juan Pablo Santos Rodríguez
>             Fix For: Review Patch, 3.4
>
>
> With commons-lang 3.2.1:
> {code}
> boolean ret = NumberUtils.isNumber( "012345678901234567" );
> {code} 
> returns {{true}}, but for 3.3.2, returns {{false}}.
> The change seems to be introduced in LANG-972 / LANG-992, as it seems to consider now
that, if the parameter string has a leading 0, and it's not hex, then it must be forcibly
octal.
> As previous 3.x versions accept 0ddd as valid decimal numbers, the suggested change on
NumberUtils#isNumber, is to replace lines [1367-1376|http://commons.apache.org/proper/commons-lang/xref/org/apache/commons/lang3/math/NumberUtils.html#L1367]
with:
> {code}
>            } else if (Character.isDigit(chars[start + 1])) {
>                // leading 0, but not hex, must be octal or decimal
>                int i = start + 1;
>                for (; i < chars.length; i++) {
>                    if (chars[i] < '0' || chars[i] > '9') { // was: if (chars[i]
< '0' || chars[i] > '7') {
>                        return false;
>                    }
>                }
>                return true; 
>            }
> {code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message