Long Division in Java not working as expected

java, long-integer

Solution

The long `x` you are creating isn't the value you expected. It is in the integer range. To create longs, use:

final long x = 24L*60L*60L*1000L*1000L;
final long y = 24L*60L*60L*1000L;
System.out.println(x/y);

The `x` you computed, in the integer range, was `500654080`. This divided by the `y` ( = `86400000`), results in `5.794607407407407...`. Java truncates the decimal part which causes the 5.

By adding an `L` after the number literal, you tell the compiler to compile it as a `long` instead of an `int`. The value for `x` you expected is `86400000000`. But is was compiled as an int.

We can reproduce the wrong value for `x` (`500654080`) by truncating it to an int:

// First correct
long x = 24L*60L*60L*1000L*1000L;
/* x = `86400000000`; */
// Now truncate
x &= 0xFFFFFFFFL; // again: don't forget the L suffix
/* x = `500654080` */

Problem

``` class LongDiv{ public static void main(String [] args){ final long x = 24*60*60*1000*1000; final long y = 24*60*60*1000; System.out.println(x/y); } } ``` although the expected answer is 1000, but the javac gives it as 5. Reason?

Original source