sydng created LANG-1018:
---------------------------
Summary: NumberUtils.createNumber(final String str) Precision
will be lost
Key: LANG-1018
URL: https://issues.apache.org/jira/browse/LANG-1018
Project: Commons Lang
Issue Type: Bug
Components: lang.math.*
Affects Versions: 3.3.2
Environment: windows 7
Reporter: sydng
With commons-lang 3.2.2:
NumberUtils.createNumber("-160952.54");
The result is "-160952.55".
Should not be based on the length of the decimal point number to judge whether
the floating point number.
Using the method (createFloat(str)) of dealing with the valid number greater
than seven Numbers will cause accuracy loss.
The source code is as follows:
try {
if(numDecimals <= 7){// If number has 7 or fewer digits past the
decimal point then make it a float
final Float f = createFloat(str);
if (!(f.isInfinite() || (f.floatValue() == 0.0F && !allZeros)))
{
return f;
}
}
} catch (final NumberFormatException nfe) { // NOPMD
// ignore the bad number
}
try {
if(numDecimals <= 16){// If number has between 8 and 16 digits past
the decimal point then make it a double
final Double d = createDouble(str);
if (!(d.isInfinite() || (d.doubleValue() == 0.0D &&
!allZeros))) {
return d;
}
}
} catch (final NumberFormatException nfe) { // NOPMD
// ignore the bad number
}
return createBigDecimal(str);
}
--
This message was sent by Atlassian JIRA
(v6.2#6252)