Ultimately depends on how much precision you want. The rule of thumb I use is to never throw away any information, so use integers only and ensure no overflow. And if you need to throw away bits do it explicitly to avoid bias due to uncontrolled rounding.
That said, in most practical cases you want some kind of sliding window moving average, where you can use a delay line and subtract the delayed value from your accumulator, which is possible with integers. This makes it simpler to manage overflow.
Then another way is to use a first order IIR low pass filter. This has "forgetting" built-in, and is inherently in update form. But it's a different kind of average which biases recent values more.