Incorrect % readings

Android OS is actually reporting the battery remaining %, but sometimes it's inconsistent (jumps, stuck @ 100%, shutdown before 0%, etc...).

The most common solution is to calibrate the % reporting, commonly called battery calibration, by running full discharge and charge cycles.

 

A full discharge cycle is achieved by using the device until it shuts down by itself. It is then required to attempt to restart it unplugged until it won't restart at all. This determines the real 0%.

 

A full charge cycle is achieved by charging the phone past the 100%. Charging for 12 hours is one way of doing it, charging for 2 hours past the 100% another way. This determines the real 100%.

However it has been noted that many phones stops charging as soon as they reach 100%, but such phones usually report accurate % in the first place as they use a very different % calculation technology.

 

Doing one discharge + one charge cycle usually improves % readings dramatically. Doing those cycles a couple of times can also improve it further.

 

If no improvements can be seen from those cycles, you might be using an extended battery on a device not supporting extended battery properly. Then you can enable the '% based on mV' in the calibration settings, though it's only valid if the mV reported by Android OS is consistent.