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

python 3.x - PyQt5 - Signal : pyqtSignal no method connect -

Apache NiFi ExecuteScript: Groovy script to replace Json values via a mapping file -