The problem of any real number $x$ being an integer can be approached by using three functions.
1.) {$x$}, the fractional part of $x$
2.) $\lfloor x \rfloor$, the floor function of $x$ which returns the greatest integer less than or equal to $x$
3.) $\lceil x \rceil$, the ceiling function of $x$ which returns the least integer greater than or equal to $x$
As already explained by @Alex Ravsky about the fractional part, you can get to know individually whether $x$ and $y$ are separately integers or not.
$$Input(x) \rightarrow \boxed{\left\{x\right\}} \rightarrow Output(y)$$
Here if $y$ = $0$, then the input is certainly an integer.
$Floor function$:
$$Input(x) \rightarrow \boxed{\lfloor x \rfloor} \rightarrow Output(y)$$
Here the output $y$ is the greatest integer which is less than or equal to $x$
For e.x. if the input is $1.33$ he output will be the greatest integer which is less or equal $1.33$. Now the integers $-2, -1,0,1$ all are less than $1.33$ but the floor function will return $1$ since it is the greatest integer less or equal $1.33$.
$$Test: \lfloor x \rfloor =x;$$
(Output of the function - Input to the function = $0$)
$$\space then\space x\space is\space an\space integer$$
Using programming you can run a loop which checks for all integers one by one and returns the (greatest)integer less or equal $x$.
$Ceiling Function:$
$$Input(x) \rightarrow \boxed{\lceil x \rceil} \rightarrow Output(y)$$
Here the output $y$ will be the smallest integer greater than or equal to $x$. Lets say the input is $3.5$ then there are many integers greater than or equal to $3.5$. But we will choose the least integer which is $4$.
$$Test: \lceil x \rceil =x;$$
(Output of the function - Input to the function = $0$)
$$\space then\space x\space is\space an\space integer$$
Using programming you can run a loop which checks for all integers one by one and returns the (least)integer greater or equal $x$.
The concept of any real number being an integer is simple. Any real number can be expressed in a decimal representation(recurring or non recurring). So we just need to truncate the fractional part of the real number to get the integer. These three functions help to truncate the fractional part so that we are left with an integer.
Finally each of these things can be checked using programming. Now every real decimal number is stored as a data type float. If you try to change your type to integer the decimal part is truncated.
int x =3.5;
will actually store only $3$ in the variable $x$. So you can also return an integer from a decimal value. In C programming storing a real value in integer type or just typecasting the real number to integer type will return you an integer.
Combining all this :
Checking $x$ and $y$ individually through both the floor and ceiling functions will tell you whether both of them are integers or not. No requirement to check whether the sum is an integer or the product is an integer or not.
Hope this helps.....