...you mean except in the case you mentioned in your question where an object moves 1.5 pixels per frame? If you want to avoid interpolation you often keep coordinates in floating-point in your game mechanics but round to the nearest integer when rendering. - Philipp
This boils down to being more convenient for humans. Why make it more complicated than it must be?
As an example, if you wanted to sample a texture directly beneath the mouse cursor:
Texture.Sample((MouseCoordinate.x + 1) / TextureWidth, MouseCoordinate.y / TextureHeight)
Texture.Load(MouseCoordinate.x + 1, MouseCoordinate.y)
Depending on the sampler state in use, both sample the same location.
UINT PlayerPositionX += 0.456322f; //Camera doesn't move fast enough to increment
UINT PlayerPositionX += (UINT)0.456322f;
UINT PlayerPositionX += 0;
//float (CPU) coordinates
float PlayerPositionX += 0.456322f;
UINT RenderPlayerAtX = round(PlayerPositionX); //Round
UINT RenderPlayerAtX = trunc(PlayerPositionX); //Always round down
UINT RenderPlayerAtX = ceil(PlayerPositionX); //Always round up
By drawing integer-pixel-sized sprites at integer locations, no portion of the objects (especially the edges along its' boundary) will fall in-between two pixels. Depending on the fractional part of the sprites location, the pixel that should be the left-most pixel of your sprite may output no color, distorting the sprites visual size.