Unexpected result in long/int division
I have values like this:
long millis = 11400000;
int consta = 86400000;
double res = millis/consta;
The question is: why res
equals 0.0
(instead of ca. 0.131944
)? It's stored in double
so there should be no rounding right?
Solution 1:
When you are using a binary operator, both arguments should be of a same type and the result will be in their type too. When you want to divide (int)/(long)
it turns into (long)/(long)
and the result is (long)
. you shouldmake it (double)/(long)
or (int)/(double)
to get a double result. Since double is greater that int and long, int and long will be turned into double in (double)/(long)
and (int)/(double)
Solution 2:
Because you are dividing a long
by an int
you get an long
results.
What you are effectively doing is
double res = (double) (millis/consta);
as millis/consta
is 0
, when cast to double
is 0.0
Try the following to divide a double by an int and get a double result.
double res = (double) millis/consta;
which is the same as
double res = ((double) millis)/((double) consta));
Solution 3:
You are doing long
division (int gets cast to long) so you get long
values, which are integers (so, 0)
You should do
double res = (double) millis / consta;
Once one of the values is casted to double, the other is too casted so the operation uses the same type in both operators.