average = float (total) / float (numReadings) ;
More: https://stackoverflow.com/questions/16221776/why-dividing-two-integers-doesnt-get-a-float
... and ... this too for deeper understanding:
https://stackoverflow.com/questions/27674295/why-do-we-separately-cast-to-float-in-an-integer-division
Added ...
When dealing with casts, either of these two syntax will compile and provide the same answer:
#include <Streaming.h>
int a = 5;
int b = 4;
void setup() {
Serial.begin(19200);
}
void loop() {
float average = (a + b) / 2;
Serial << "I Average=" << average << "\n";
average = ((float) a + (float) b) / 2;
Serial << "F1 Average=" << average << "\n";
average = (float (a) + float (b)) / 2;
Serial << "F2 Average=" << average << "\n";
}
> I Average=4.00
F1 Average=4.50
F2 Average=4.50