Why does integer division code give the wrong answer?

Julian C. picture Julian C. · Sep 2, 2011 · Viewed 58.8k times · Source

I have a very simple division in Java (it's a product quantity / production per hour), however whenever I make this division I get strange errors:

float res = quantity / standard;

I have tried the above division with several values and I always get errors, however the one that I've tried everywhere else and gotten right was this:

Everywhere in the world:

13.6 = 6800 / 500;

Java:

13.0 = 6800 / 500;

I've researched BigDecimal and BigInteger, however I haven't found a way to create this division with them, is there any other way to do this division in Java without having precision errors??

Any help will be greatly appreciated.

Answer

aioobe picture aioobe · Sep 2, 2011

You're dividing integers, which means that you're using integer division.

In integer division the fractional part of the result is thrown away.

Try the following:

float res = (float) quantity / standard;
            ^^^^^^^

The above forces the numerator to be treated as a float which in turn promotes the denominator to float as well, and a float-division is performed instead of an int-division.

Note that if you're dealing with literals, you can change

float f = 6800 / 500;

to include the f suffix to make the denominator a float:

float f = 6800f / 500;
              ^