The thing is, "%f" rounds differently than "%d".
>>> "%.1f" % 1.56 ### I expect 1.6 '1.6' >>> "%d" % 1.6 ### By analogy, I expect 2 '1'The correct solution is either "%.0f" (yes - it exists) or explicitly round it yourself how you like, e.g. "%d" % int(x+0.5) or using round().
This was causing off-by-one results in my code which I fortunately identified prior to submitting a manuscript. But I'm disappointed, Python; and don't blame C.
Note: As a further issue, if you need to handle negative values also, doublecheck the rounding behaviour of your code...it may not always be what you expect.