number formatting - Detect Java NumberFormat inaccuracy -


i want parse integer accurately, 1 has been potentially formatted according current locale. if didn't parse integer accurately, want know it. use:

string string = "1111122222333334444455555"; locale locale = locale.getdefault(); numberformat numberformat = numberformat.getintegerinstance(locale); numberformat.setparseintegeronly(); number number = numberformat.parse(string); 

obviously "1111122222333334444455555" represents big number, bigger long can handle. numberformat gives me... double??

i guess have expected receive biginteger rather double, since asked integer-specific number formatter. never mind that; bigger problem double value 1.1111222223333344e24! not equal 1111122222333334444455555!!

if numberformat gives me parsed value not equal stored in input string, how detect that?

put way: "how can know if double value numberformat equivalent integral value represented in original string?"

the javadocs parse() state return long if possible, otherwise return double. check return value long.

"returns long if possible (e.g., within range [long.min_value, long.max_value] , no decimals), otherwise double."

"how can know if double value numberformat equivalent integral value represented in original string?"

if returns double, not equivalent integral value because double cannot accurately represent values @ magnitude. concrete example:

  number = numberformat.parse("-9223372036854775809"); // integer.min_value - 1   number b = numberformat.parse("-9223372036854775810"); // integer.min_value - 2   system.out.println((a.equals(b))); // prints "true"   number c = numberformat.parse("-9223372036854776800");   system.out.println((a.equals(c))); // prints "true" 

Comments

Popular posts from this blog

c# - SVN Error : "svnadmin: E205000: Too many arguments" -

c# - Copy ObservableCollection to another ObservableCollection -

All overlapping substrings matching a java regex -