commons-issues mailing list archives

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

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

Bernd Eckenfels commented on LANG-997:
--------------------------------------

Juan, the problem is that "0" prefix is detected as an octal number. In that case it only
allows digits from 0-7, so 077 is ok but 088 is not.

I think this method is not really useful as it does not define what numbers it will accept.
It should differentiate between integers and floats and between encoded and consitent (decimal)
encoding. And for the encoded form, it needs to spell out the syntax supported. For example
"0" and "0x" and "#" for Integer.decode(). Integer.parseInt("012") -> 12. Integer. Integer.decode("012")
-> 10. It also needs to support different value ranges. I think the most common usage of
this is to guard any of the parse/decode methods, so there should be a 1:1 acceptor.

> 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, Discussion, 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