wOBA Calculator (Weighted On-Base Average)
wOBA Calculator (Weighted On-Base Average)
Weighted on-base average: one denominator, and a separate published run value for each way of reaching base. The weights are recomputed every season by FanGraphs, so this page asks which season’s weights you want rather than pretending they are constants.
wOBA from a named season's weights
Weighted runs per plate appearance112 singles, 30 doubles, 3 triples, 25 home runs, 55 unintentional walks, 8 hit by pitch, 550 at-bats and 5 sacrifice flies, on 2024 weights
The formula is published in full; the weights are a seasonal table
- the structure, from FanGraphs’ own library
- the 2013 formula is printed there as “(0.690×uBB + 0.722×HBP + 0.888×1B + 1.271×2B + 1.616×3B + 2.101×HR)” over “(AB + BB – IBB + SF + HBP)”. Bases on balls minus intentional walks is simply unintentional walks
- the weights are run values, not bases
- slugging percentage prices a double at exactly twice a single because it is two bases. The fitted run values disagree: in 2024 a double was 1.254 against a single’s 0.882, which is 1.42 times, not two, and a home run 2.050, which is 2.32 times, not four
- one denominator
- and that is the point. OPS adds a fraction over at-bats to a fraction over at-bats plus walks plus hit-by-pitches plus sacrifice flies, which is not a weighted average of anything. wOBA puts every event over the same base, so the result really is runs per plate appearance on a scale set to look like on-base percentage
- annual weights, and what is NOT here
- FanGraphs recomputes the weights every season and publishes 156 of them; three are offered above, and anything else has to be read off that table, because interpolating between two seasons’ fitted weights would invent a run environment that never existed. wRC+, wRAA and every park- or league-adjusted version are absent for a harder reason: all of them need league-wide seasonal totals and a park factor for the specific stadiums a batter played in, neither of which is on a box score
Worked example
112 singles, 30 doubles, 3 triples, 25 home runs, 55 unintentional walks, 8 hit by pitch, 550 at-bats and 5 sacrifice flies, on 2024 weights
Numerator = 0.689×55 + 0.720×8 + 0.882×112 + 1.254×30 + 1.590×3 + 2.050×25 = 236.08 runs above an out
Denominator = 550 + 55 + 8 + 5 = 618
wOBA = 236.08 ÷ 618 = .382, against a 2024 league average of .310
Switch the weights to 2023 and the same line reads .380; switch them to 2013 and it reads .386. Nothing about the batter changed — the run environment the weights were fitted to did
Move 10 of the singles into home runs and wOBA rises to .401, because the weights price the two differently. On-base percentage would not move at all
Double every count and nothing moves; set them all to 0 and the page returns nothing, because a weighted average over no plate appearances does not exist
The weights, for the three seasons this page offers
| 2024 | 2023 | 2013 | |
|---|---|---|---|
| Unintentional walk | 0.689 | 0.696 | 0.690 |
| Hit by pitch | 0.720 | 0.726 | 0.722 |
| Single | 0.882 | 0.883 | 0.888 |
| Double | 1.254 | 1.244 | 1.271 |
| Triple | 1.590 | 1.569 | 1.616 |
| Home run | 2.050 | 2.004 | 2.101 |
| League-average wOBA | .310 | .318 | .314 |
How four on-base statistics price the same four events
| Walk | Single | Double | Home run | |
|---|---|---|---|---|
| Batting average | nothing | 1 | 1 | 1 |
| On-base percentage | 1 | 1 | 1 | 1 |
| Slugging percentage | nothing | 1 | 2 | 4 |
| wOBA, 2024 weights | 0.689 | 0.882 | 1.254 | 2.050 |
One denominator, and a published price for each event
Weighted on-base average exists because of two specific faults in the statistics it replaces, and both are arithmetic rather than taste. On-base percentage cannot tell a walk from a home run: both are one time on base out of one plate appearance. And OPS — on-base percentage plus slugging percentage — adds two fractions that do not share a denominator, which is not a weighted average of anything and leaves the result without an interpretation. wOBA puts every way of reaching base over a single denominator and multiplies each by a fitted run value, so the answer really is runs per plate appearance, on a scale deliberately set to read like an on-base percentage.
FanGraphs publishes the structure in full. Its library article prints the 2013 formula as “(0.690×uBB + 0.722×HBP + 0.888×1B + 1.271×2B + 1.616×3B + 2.101×HR)” divided by “(AB + BB – IBB + SF + HBP)”, and bases on balls minus intentional walks is just unintentional walks. Unlike an expected-goals model or a WAR implementation, nothing here is withheld: the formula is written out, every input is on a published batting line, and the fitted weights are tabulated season by season.
The weights are not constants. FanGraphs recomputes them every season from that season’s run environment and publishes them on its Guts! page, which carried 156 seasons from 1871 to 2026 when it was read for this page. A weight set is therefore a seasonal table, and the honest choices are to take the figures from the reader or to offer a small number of named seasons and say which. This page does the second, and the season selector above is not a detail: it changes the answer.
The weights are run values, and they do not agree with slugging percentage about anything. On 2024 weights a double is 1.254 against a single’s 0.882 — 1.42 times a single, not two. A home run is 2.050, or 2.32 times a single, not four. An unintentional walk is 0.689, which slugging percentage prices at zero and on-base percentage prices the same as a home run. That is the argument for the statistic in three numbers, and it is why an identical batting line moves four points of wOBA between two seasons’ weights without the batter doing anything differently.
Where this page stops. wRC+, wRAA and every park-and-league-adjusted descendant of wOBA need league-wide seasonal totals and a park factor for the specific stadiums a batter actually played in. Neither is on a box score, both are annual tables of the kind this engine cannot hold, and a fitted stand-in would be wrong at the extremes, which is where a park adjustment changes anything. So this page computes the raw weighted average, prints the league average beside it and goes no further; the same wall, built higher, is what stops the WAR page computing anything at all. For the unweighted versions of the same line, with the rule numbers that define them, see the batting average, OBP and SLG calculator.
Frequently asked questions
What is the formula for wOBA?
Each way of reaching base multiplied by that season’s fitted run value, divided by at-bats plus unintentional walks plus hit-by-pitches plus sacrifice flies. FanGraphs prints the 2013 version as (0.690×uBB + 0.722×HBP + 0.888×1B + 1.271×2B + 1.616×3B + 2.101×HR) over (AB + BB – IBB + SF + HBP).
Why does this page ask which season’s weights to use?
Because the weights are not constants. FanGraphs recomputes them every year and publishes 156 seasons of them. The same batting line reads .382 on 2024 weights and .386 on 2013 weights, so a calculator with one hidden weight set is answering about a season it never names.
Is wOBA better than OPS?
It fixes two specific faults: OPS adds two fractions with different denominators, and it weights on-base and slugging equally when the fitted run values do not. wOBA has one denominator and a separate price per event. The cost is that it depends on a seasonal table.
What is a good wOBA?
FanGraphs prints a rule-of-thumb chart — Excellent .400 down to Awful .290 — with its own warning that “the following chart is meant as an estimate”. Those are point estimates rather than published bands, so this page does not turn them into a verdict; compare against the league average printed beside your answer.
Why can’t this page give me wRC+ as well?
Because wRC+ needs a league-wide seasonal run total and a park factor for the stadiums a batter actually played in. Neither is on any batting line, both are annual tables, and a fitted approximation would be wrong at exactly the extremes where a park adjustment matters.
Related calculators
References
- FanGraphs Library. wOBA — gives the 2013 formula as “(0.690×uBB + 0.722×HBP + 0.888×1B + 1.271×2B + 1.616×3B + 2.101×HR)” over “(AB + BB – IBB + SF + HBP)”, states that “These weights change on a yearly basis”, gives the 2013 league wOBA as .314, and prints a rule-of-thumb chart (Excellent .400 down to Awful .290) warning that “the following chart is meant as an estimate”. library.fangraphs.com (read 12 Oct 2026).
- FanGraphs. Guts! — wOBA and FIP Constants — 156 seasons, 1871 to 2026, fetched twice at two URLs on 12 Oct 2026 and real text rather than an image both times. 2024: wOBA .310, wBB .689, wHBP .720, w1B .882, w2B 1.254, w3B 1.590, wHR 2.050. 2023: .318, .696, .726, .883, 1.244, 1.569, 2.004. 2013: .314, .690, .722, .888, 1.271, 1.616, 2.101 — matching, digit for digit, the weights printed in prose on the separate library article. fangraphs.com.
- Major League Baseball. Glossary: On-base Percentage (OBP) — times on base “include hits, walks and hit-by-pitches” and exclude errors, fielder’s choice and a dropped third strike, while “sacrifice bunts are removed from the equation entirely”. The entry calls OBP a per-plate-appearance rate, which is looser than Rule 9.21(f): removing sacrifice bunts means the denominator is not plate appearances. mlb.com (read 12 Oct 2026).
- Major League Baseball. Glossary: Slugging Percentage (SLG) — “the total number of bases a player records per at-bat”, as “(1B + 2Bx2 + 3Bx3 + HRx4)/AB”; it “deals only with hits and does not include walks and hit-by-pitches in its equation”. mlb.com (read 12 Oct 2026).
- Major League Baseball. Glossary: On-base Plus Slugging (OPS) — “OPS adds on-base percentage and slugging percentage to get one number that unites the two.” The entry states no shortcoming at all: it mentions neither the two different denominators nor the equal weighting, which is why this page says both in its own words. mlb.com (read 12 Oct 2026).
