You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@commons.apache.org by "Costa Theodosiou (JIRA)" <ji...@apache.org> on 2019/04/08 04:29:00 UTC

[jira] [Created] (LANG-1444) NumberUtils.createNumber() does not create BigDecimal for decimal fractions tending to zero

Costa Theodosiou created LANG-1444:
--------------------------------------

             Summary: NumberUtils.createNumber() does not create BigDecimal for decimal fractions tending to zero
                 Key: LANG-1444
                 URL: https://issues.apache.org/jira/browse/LANG-1444
             Project: Commons Lang
          Issue Type: Bug
          Components: lang.math.*
    Affects Versions: 3.8.1
            Reporter: Costa Theodosiou


The following code demonstrates the issue:

{{System.out.println(NumberUtils.createNumber("1.1").getClass().getName());}}
{{System.out.println(NumberUtils.createNumber("1.001").getClass().getName());}}
{{System.out.println(NumberUtils.createNumber("1.00001").getClass().getName());}}
{{System.out.println(NumberUtils.createNumber("1.0000001").getClass().getName());}}
{{System.out.println(NumberUtils.createNumber("1.000000001").getClass().getName());}}
{{System.out.println(NumberUtils.createNumber("1.00000000001").getClass().getName());}}
{{System.out.println(NumberUtils.createNumber("1.0000000000001").getClass().getName());}}
{{System.out.println(NumberUtils.createNumber("1.000000000000001").getClass().getName());}}
{{System.out.println(NumberUtils.createNumber("1.00000000000000001").getClass().getName());}}
{{System.out.println(NumberUtils.createNumber("1.0000000000000000001").getClass().getName());}}
{{System.out.println(NumberUtils.createNumber("1.000000000000000000001").getClass().getName());}}
{{System.out.println(NumberUtils.createNumber("1.00000000000000000000001").getClass().getName());}}

will print:

{{java.lang.Float}}
{{java.lang.Float}}
{{java.lang.Float}}
{{java.lang.Float}}
{{java.lang.Double}}
{{java.lang.Double}}
{{java.lang.Double}}
{{java.lang.Double}}
{{java.lang.Float}}
{{java.lang.Float}}
{{java.lang.Float}}
{{java.lang.Float}}

It seems the problem is towards the bottom of the createNumber method that compares the float to double string representation:

f.toString().equals(d.toString())

For the misbehaving tests, the string "1.0".equals("1.0")



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)