Search code examples
c++division

How do I avoid getting -0 when dividing in c++


I have a script in which I want to find the chunk my player is in. Simplified version:

float x = -5
float y = -15
int chunkSize = 16

int player_chunk_x = int(x / chunkSize)
int player_chunk_y = int(y / chunkSize)

This gives the chunk the player is in, but when x or y is negative but not less than the chunkSize (-16), player_chunk_x or player_chunk_y is still 0 or '-0' when I need -1

Of course I can just do this:

if (x < 0) x--
if (y < 0) y--

But I was wondering if there is a better solution to my problem.

Thanks in advance.


Solution

  • Your issue is that you are casting a floating point value to an integer value.

    This rounds to zero by default.

    If you want consistent round down, you first have to floor your value:

    int player_chunk_x = int(std::floor(x / chunkSize);