Never store money as a float
0.1 + 0.2 is not 0.3
Open any Ruby console and try it:
irb> 0.1 + 0.2 => 0.30000000000000004
That's not a Ruby bug β it's how every language stores Floats (IEEE 754 binary floating point). Most fractions that look clean in base 10, like 0.1, can't be represented exactly in binary, the same way 1/3 can't be written exactly in decimal. The error is tiny, a few quadrillionths β until you're summing thousands of payouts, and the rounding drift adds up to real cents that don't reconcile.
PawWalk never has this problem, because it never stored money as a float in the first place. Every price on this app β walkers.price_per_30_min_cents, bookings.price_cents, payments.amount_cents β is an integer number of cents. $12.50 is stored as 1250. Integers add, subtract, and compare exactly, every time. No rounding, no drift.