I've taken to using float values in my positioning in consideration that integer values can start to get misaligned, drift a bit, due to imprecison. This is especially true if you're having to use float values when keeping your frame rate synchronized. I do, however, use a little trick to even out the placement.
Shorthand code follows:
float xpos; // assuming these values are calculated somewhere
float ypos;
dbSprite (spritenum, (int) (xpos + 0.5f), (int) (ypos + 0.5f), imagenum);
The second and third arguments are the x and y components of the sprite's position. Of course the (int) type casts the results into and integer for the sake of the function. Adding 0.5f to the float position allows us to round up or down when we cast it to an int.
Example:
// rounds down
xpos = 243.2;
(int) (xpos + 0.5f)
(int) (243.2 + 0.5f)
(int) (243.7)
243
// rounds up
xpos = 243.8;
(int) (xpos + 0.5f)
(int) (243.8 + 0.5f)
(int) (244.3)
244
When I coded my Pong game for the Dark GDK challenge I used floats for the ball position to help keep it on a straight line. It also helped when calculating the velocity x and y components since those were based on trig values that had to represent floats. But since the ball was a class object I kept integer values of the x and y positions as class data after calculating the float values because I could use them in the on-screen positioning but also because I would need to reference them later to check for collisions.
Lilith, Night Butterfly
I'm not a programmer but I play one in the office