Welcome to the forums @EvilNickoals!
You can try something like this in code and see if it removes the slight inaccuacy:
translation.x = int(translation.x)
# or maybe
translation = translation.round()
Though having a slight overlap and/or extra geometry is probably the way to go, as small inaccuracies like in the screenshot are due to floating point precision issues.