That can happen with vector2 positioning as well and even more so.
The draw widths and heights must vary to fit i.e. contract or expand.
For two sprites to adjoin pixel perfectly. The width of one sprite must be calculated from two found integer positions, that is after the floating point error has occurred.
You are drawing a grid or a row were tiles are calculated to be positioned via a index and tile.width such as.
positionRectangle.X = ix * tileWidth; // were ix is the variable in a for loop.
positionRectangle.Width = tileWidth;
This is were you would get floating point errors above.
To counter this you calculate the actual integer positions then find the width as shown below.
positionRectangle.Width = ( (ix + 1 ) * tileWidth) - (ix * tileWidth);
This accounts for the variations that arise from floating point errors by adjusting the actual visual width of each drawn tile or sprite in a contiguous set, by the start position of one tile to start of the next tile position.
Otherwise use Quads.