user3423927 user3423927 - 5 months ago 22
Java Question

Why 10%20 returns 10 in Java

this is my program. And it is printing 10. I don't know why. Any help would be appreciated.

public static void main(String[] args) {
double a=10;
double b=20;
System.out.println(a % b);
}


I am expecting 0 as reminder as 20 goes to 10 with 0.5 times leaving 0 as reminder.

Answer

% is called the modulous (modulo or mod) operator. It means to take the remainder (or amount left over) of an integer division.

For example, 10 / 20 doesn't result in a whole number in integer division (it results in.5), and leaves a remainder. That remainder is 10.

Here are some examples (all division is integer division)

10 / 20 = 0, remainder 10. Thus, 10 % 20 = 10
3 / 2 = 1, remainder 1. So, 3 % 2 = 1
4 / 2 = 2, remainder 0. and 4 % 2 = 0 

EDIT:
Since a and b are doubles, it's possible that you are trying to use mod with doubles. In that case I would take a look at How do I use modulus for float/double? However, note that even when a and b are explicitly written as doubles (10.0 and 20.0), the result of the modulo is still 10.0. The explanation for why this isn't .5 is given pretty clearly in this answer, which cites the JLS rules for IEEE arithmetic (and is reiterated in Stephen C's answer).

Comments