Implementing gravity in VHDL and VGA.
Between floats (difficult to implement, resource-hungry) and integers (not enough precision), there's an intermediate: it's called fixed point math. Fixed point isn't much more difficult than integers to work with. And it is sufficient in your case.

The basic idea is that you represent each value by an integer number. The correspondance between both is done simply by multiplying or dividing by a fixed value (usually a power of two, to make it easier). For example if you set the ratio to 256, that means the 1.5 value will be represented by the 16#180# number. Because 180 in hex (=384 in dec) divided by 256 makes 1.5. Another way to see it is that the stored number represents an integral number of 1/256th units.

This means that implementation of addition and subtraction does not change compared to the usual integer implementation. Multiplication is very similar to the classic integer multiplication, you just have to divide by your ratio after (or just shifting the correct number of bits if it is a power of two).

The only choice to make, then, is to choose the ratio appropriately so that you can accurately represent the values you need in your specific case.