Another way to calibrate the system would be to:
- Apply known (aka measure it) battery voltage
- just print the raw ADC value (or do a little average)
Now the calibrated value for 'BatRatio' is simply:
BatRatio = Vbat * 1024 / adcValue
With Vbat in mV.
This will make 'BatRs' and 'BatVref' obsolete.
For the sketch, just drop
for (int i=0; i<8; i++) analogRead(BatVolt_pin);
You already have the small delay. I think this delay can even be shorter.
And especially in the average I would reduce the delay(). 50ms is already pretty blocking.
And two point about the battery percentage:
a) You have an error in the calculation. Or, at least in the values used. Vbat is in mV, so 'batVolt_Max' and 'batVolt_Min' need to be as well
b) The percentage value will not give you a real indication. Battery capacity is not at all lineair with voltage. So now it will probably drop very quick, hover around a certain value most of the time and at the end drop quickly again.
Example of a discharge curve:

And do yourself (and especially future-self) a favor, pick a single naming convention and stick with it. I use camelCase as is tradition with Arduino, and in this case I used UpperCamelCase to indicate constants. With 'batVolt_Max' you mix camelCase and underscores which makes it harder to remember how to write a variable name. Was it 'batVoltMax'? 'bat_Volt_max'? 'bat_voltMax'? If you stick to a convention you just know how to write it.