A battery pack and a method of operating a battery system. The battery pack includes a rechargeable battery and a processor for monitoring the battery during charging and discharging. The processor receives data values representing the battery voltage, temperature and current, and the processor performs a series of calculations using those data values. In one of these calculations, the processor determines the actual full capacity of the battery. Preferably, the processor also keeps track of an uncertainty value that represents an uncertainty in the capacity of the battery; and the processor calculates the actual full capacity of the battery at the end of each discharge cycle if, at that time, the uncertainty value is less than a given percentage of a nominal full capacity of the battery.