Why java += get wrong result, and how can I prevent this? -


why java += wrong result, , how can prevent problem? (for example way show warning in ide?)

i tried eclipse & intellij both not show warning.

sample code:

    {         long = 20000000000000000l;         double b = 90.0;         += b;         system.out.println(a); // 20000000000000088 ng     }      {         long = 10000000000000000l;         double b = 90.0;         += b;         system.out.println(a); // 10000000000000090 ok     }      {         long = 20000000000000000l;         double b = 90.0;         += (long) b;         system.out.println(a); // 20000000000000090 ok     } 

according jls, compound assignment expression

a += b; 

is equivalent to

a = (long) (a + b); 

since b double, binary numeric promotion occurs before addition happens. both operands converted double values , addition happens floating point arithmetic.

the value 20000000000000090 cannot represented double , therefore lose precision, getting 20000000000000088 instead. gets cast long has enough precision represent 20000000000000088.

your second snippet produces 10000000000000090 can represented double.

your third snippet equivalent to

a = (long) (a + (long) b); 

which uses integer arithmetic. 20000000000000090 can represented long.

i don't know of tools warn this.

related:


Popular posts from this blog

php - How should I create my API for mobile applications (Needs Authentication) -

5 Reasons to Blog Anonymously (and 5 Reasons Not To)

Google AdWords and AdSense - A Dynamic Small Business Marketing Duo