Question: ```
int total = (int) Math.ceil(157/32);

```

Why does it still return 4? `157/32 = 4.90625`, I need to round up, I've looked around and this seems to be the right method.

I tried `total` as `double` type, but get 4.0.

What am I doing wrong?

Answer: 
You are doing `157/32` which is dividing two integers with each other, which always result in a rounded down integer. Therefore the `(int) Math.ceil(...)` isn't doing anything. There are three possible solutions to achieve what you want. I **recommend** using either **option 1** or **option 2**. Please do **NOT** use **option 0**.

Option 0
--------

Convert `a` and `b` to a double, and you can use the division and `Math.ceil` as you wanted it to work. However I strongly discourage the use of this approach, because double division can be imprecise. To read more about imprecision of doubles see [this question](https://stackoverflow.com/questions/10444350/c-sharp-loss-of-precision-when-dividing-doubles).

```
int n = (int) Math.ceil((double) a / b));

```

Option 1
--------

```
int n = a / b + ((a % b == 0) ? 0 : 1); 

```

You do `a / b` with always floor if `a` and `b` are both integers. Then you have an inline if-statement which checks whether or not you should ceil instead of floor. So +1 or +0, if there is a remainder with the division you need +1. `a % b == 0` checks for the remainder.

Option 2
--------

This option is very short, but maybe for some less intuitive. I think this less intuitive approach would be faster than the double division and comparison approach:  

Please note that this doesn't work for `b < 0`.

```
int n = (a + b - 1) / b;

```

To reduce the chance of overflow you could use the following. However please note that it doesn't work for `a = 0` and `b < 1`.

```
int n = (a - 1) / b + 1;

```

Explanation behind the "less intuitive approach"
------------------------------------------------

Since dividing two integers in Java (and most other programming languages) will always floor the result. So:

```
int a, b;
int result = a/b (is the same as floor(a/b) )

```

But we don't want `floor(a/b)`, but `ceil(a/b)`, and using the definitions and plots from [Wikipedia](http://en.wikipedia.org/wiki/Floor_and_ceiling_functions): ![enter image description here](https://i.stack.imgur.com/AMB1H.png)

With these plots of the floor and ceil functions, you can see the relationship.

![Floor function](https://i.stack.imgur.com/ry8ss.png) ![Ceil function](https://i.stack.imgur.com/ZQyDC.png)

You can see that `floor(x) <= ceil(x)`. We need `floor(x + s) = ceil(x)`. So we need to find `s`. If we take `1/2 <= s < 1` it will be just right (try some numbers and you will see it does, I find it hard myself to prove this). And `1/2 <= (b-1) / b < 1`, so

```
ceil(a/b) = floor(a/b + s)
          = floor(a/b + (b-1)/b)
          = floor( (a+b-1)/b) )

```

This is not a real proof, but I hope you're satisfied with it. If someone can explain it better I would appreciate it too. Maybe ask it on [MathOverflow](https://mathoverflow.net/).
```
int total = (int) Math.ceil( (double)157/ (double) 32);

```