Ok I hope I am mising something here as I really don’t want this to be a bug.

The following piece of code returns 2. Per my understanding of the ceiling functionality, the result should be 3 because 7/3 is roughly 2.33333 and the ceiling should return 3.

Is this a bug or am I missing something? Thanks.

`Integer pageNumber = (Integer) Math.ceil(7/3);`

This returns 2 and not 3 as expected.

It works fine on other input. For example:

`Integer pageNumber = (Integer) Math.ceil(8/5);`

This returns 2 as expected.

**Answer**

This is probably because when you divide an `Integer`

by an `Integer`

you get an `Integer`

back which has the same value as `Decimal.round(RoundingMode.DOWN)`

.

```
system.assertEquals(1, 8/5);
system.assertEquals(8/5, (8.0/5).round(RoundingMode.DOWN);
system.assertEquals(-1, -8/5);
system.assertEquals(-8/5, (-8.0/5).round(RoundingMode.DOWN);
system.assertEquals(2, 7/3);
system.assertEquals(7/3, (7.0/3).round(RoundingMode.DOWN);
```

If you know you have `Integers`

and you want to get their ceiling, you could do something like:

```
public static Integer ceiling(Integer x, Integer y)
{
return Math.ceil(Decimal.valueOf(x).divide(y, /*digits*/ 1));
}
```

**Attribution***Source : Link , Question Author : Richard N , Answer Author : Adrian Larson*