Java: Wrong results for division?

When dividing two integers, Java uses integer division. In integer division, the result is truncated (fractional part thrown away) and not rounded to the closest integer. For example: 99 / 10 == 9.

To get actual floating-point result

Cast the numerator (or denominator) to double:

double r = (double) i / j;    // r == 1.66666…

Rounded result

Cast numerator as above, and use Math.round:

int r = (int) Math.round((double) i / j);

Why does the above work?

(double) i / j is parsed as ((double) i) / j. If one of the operands is a double, the other operand is promoted to a double as well. Then floating-point division is used, and the result is a floating-point value.


Be the first to comment!