 # What does % do? Help with understanding its use in "ES6: Write Higher Order Arrow Functions" hint

I understand what most of the code in line 5 is doing. The one part I’m not completely clear on is the part in the filter that is `num % parseInt(num) ===0`

I’m trying to filter out the decimals. At first I tries using num.isInteger and that didn’t work and I think the reason why is that the return value of that is a “true/false” and not a string or array of the numbers that are integers.

parseInt gives a string of numbers, which is good! So I understand why this should be used.

The “%” confuses me. I looked it up and it’s listed as “Modulus (division remainder)” so what is going on here? Am I dividing all my numbers by themselves and seeing if that gives me 0, and then taking that string further down the chain of functions? I don’t understand how that would get rid of the decimals and pass only whole numbers. Since all numbers divided by themselves are 1 I don’t see how that would pass.

I think I’m fundamentally misunderstanding the use and meaning of “%” here. Could anyone help clarify this?

1 Like

`%` is the modular function. It finds the remainder instead of the quotient value of a division expression.

Examples:

``````var x;
x = 5 % 2; // x = 1
x = 6 % 2; // x = 0, it divides cleanly, so no remainder
x = 11 % 3; // x = 2; 3*3 = 9, 11-9 = 2 the remainder
``````

The filter function, in question, filters out values that are greater than 0 (`num > 0`) and are not decimals (`num % parseInt(num) === 0`). The remainder function in the case of the decimal values will evaluate somewhat like this:

``````5.6 % parseInt(5.6) === 0
5.6 % 5 === 0
0.6 === 0
``````

This should end up giving you a false since the remainder of the division is 0.6 and not 0.

Thank you for this explanation. Your example and explanation of `x = 11 % 3` really helped me understand this. So with a decimal
`5.6 % parseInt(5.6) ===0`
`parseInt` turns 5.6 into 5
5 goes into 5.6 one time and then `0.6` remains. Obviously that is not equal to zero

I only wrote this reply to help solidify my understanding. I know that it really only repeats the same thing you said. But anyway… THANK YOU!

1 Like

this helped me thanks so much

@NarlaThotep, @whiteobah - just fyi, there are more obvious ways to do what this is doing:

1. `% 1`. If you divide any integer by 1, there will be no remainder:
``````5 % 1 // this is 0
5.6 % 1 // this will not be 0
``````
so
``````5 % 1 === 0 // this is true (it is an integer)
5.6 % 1 === 0 // this is false (it's not an integer)
``````
2. Even clearer: `Number.isInteger(number)` is true if an integer, false if not.
``````Number.isInteger(10) // this is true
Number.isInteger(10.1) // this is false
``````
1 Like

thanks… so much i understand better