Enter age 30 with a resting heart rate of 60 into a zone calculator, then delete the
resting value and recalculate. On our tool, zone 2 moves from 138 to 151 bpm down to 114
to 133 bpm. Same person, same age, 24 beats of difference, and the tool switches formula
without telling you. This article runs both formulas exactly as the code runs them, then
covers where each one misleads.
The five zones the calculator computes
The tool estimates maximum heart rate as 220 minus your age, then cuts the range from 50
percent to 100 percent of that estimate into five bands:
| Zone | Label | Percent of the estimate |
| 1 | Warm Up | 50 to 60 |
| 2 | Fat Burn | 60 to 70 |
| 3 | Cardio | 70 to 80 |
| 4 | Peak | 80 to 90 |
| 5 | Maximum | 90 to 100 |
The zone names come from the interface labels in the component. Treat the Fat Burn label
with suspicion. It describes the fuel mix at low intensity, and total calories burned in
a session can still end higher from a harder zone.
Formula one: percent of maximum
With an empty resting field, the tool multiplies the maximum estimate directly. For age
30, the estimate is 220 minus 30, so 190 bpm. Each boundary is the estimate times the
zone percentage, rounded independently:
| Zone | Calculation | Result in bpm |
| 1 | 190 times 0.50 to 0.60 | 95 to 114 |
| 2 | 190 times 0.60 to 0.70 | 114 to 133 |
| 3 | 190 times 0.70 to 0.80 | 133 to 152 |
| 4 | 190 times 0.80 to 0.90 | 152 to 171 |
| 5 | 190 times 0.90 to 1.00 | 171 to 190 |
This is the simple method. It needs one input, the age, and it ignores how fit you are.
Formula two: Karvonen
Enter a positive resting heart rate and the tool switches to the Karvonen form. Each
boundary becomes the heart rate reserve times the zone percentage, plus the resting
rate. The reserve is the maximum estimate minus the resting value.
For age 30 with a resting heart rate of 60, the reserve is 190 minus 60, so 130:
| Zone | Calculation | Result in bpm |
| 1 | 130 times 0.50 plus 60, to 0.60 | 125 to 138 |
| 2 | 130 times 0.60 plus 60, to 0.70 | 138 to 151 |
| 3 | 130 times 0.70 plus 60, to 0.80 | 151 to 164 |
| 4 | 130 times 0.80 plus 60, to 0.90 | 164 to 177 |
| 5 | 130 times 0.90 plus 60, to 1.00 | 177 to 190 |
Compare the two tables. Zone 2 spans 114 to 133 by percent of maximum and 138 to 151 by
Karvonen. The bands do not overlap. Two people of the same age can both train "in zone
2" at heart rates 24 beats apart if one entered a resting value and one did not, and
both would be following the same calculator.
Boundary and rounding behavior worth knowing
The code rounds every boundary with Math.round, separately. Adjacent zones therefore
share a number: zone 1 ends at 114 and zone 2 starts at 114. A reading of exactly 114
sits on the line, so record it as the lower edge of zone 2.
The formula switch is silent. The resting field is optional by design, and any positive
number triggers Karvonen while an empty or zero field falls back to percent of maximum.
If you log zones over months, fix one method now and note it next to your logs.
The guard rejects non-positive and non-numeric age by doing nothing. A blank output
after pressing calculate means the age field, not the button.
The 220 minus age estimate itself carries known individual error, and no calculator
input fixes that. If training decisions carry health consequences for you, a supervised
maximal test replaces the estimate, and the zone tables above become obsolete for you.
How to measure resting heart rate for the Karvonen branch
1. Measure on three consecutive mornings, before getting out of bed.
2. Count pulse for a full 60 seconds each morning, watch or band both work if the band
shows a raw bpm value.
3. Average the three values and round to the nearest whole number.
4. Enter that average as the resting value, once, and keep it in every future session
log so the zones stay comparable.
5. Remeasure after any two-week break or illness, since resting rate shifts with
detraining and recovery.
Checklist before you train on zone numbers
- You know which formula produced your table, percent of maximum or Karvonen.
- The resting value, if used, is a three-morning average, not a single reading.
- Your age and resting inputs match the placeholders 30 and 60 only by coincidence.
- You treat shared boundary values as the start of the higher zone.
- You remember every figure derives from one estimate, 220 minus age.
- You replace the estimate with a supervised test before using zones for cardiac
rehabilitation or comparable decisions.
Zone math is arithmetic, and the arithmetic above is exact. The estimate it feeds on is
the weak link, so anchor it with your own measured resting rate and recheck it when your
training changes.
What did your zone 2 look like with and without a resting value? Run both calculations
in the [heart rate calculator](https://webrecast.com/en/heart-rate-calculator) and see
the switch happen before you pick one method.