How we calculate
Every number on this site can be re-derived by hand from what’s printed on the page. This is where the constants, the formulas, the rounding rules and the verification process are written down — so you can check our work instead of trusting it.
The two-tier data rule
We split the inputs into two categories that behave nothing alike, and we store them in separate files so they can never be confused:
| Tier | Examples | Changes | Confidence |
|---|---|---|---|
| Physical constants | Bag yields, coverage per gallon, ft³ per cubic yard, stone density | Almost never | High — sourced and cited |
| Prices | $/bag, $/cubic yard delivered, $/ton, $/sq ft installed | Constantly, and by region | Low by nature — estimates only |
Mixing the two is how calculators go stale in a way nobody notices: a price drifts, and because it lives next to a physical constant, updating it feels as risky as changing physics, so nobody touches it. Keeping them apart means prices can be refreshed on their own schedule without anyone re-opening the question of what an 80 lb bag yields.
Current price basis: US national average, set June 2026, re-verified quarterly. Prices are never live and are never a quote.
How a constant gets onto the site
- Read the primary source. A manufacturer data sheet or an extension-service publication — not another calculator. Aggregator sites copy each other, and a single transcription error propagates across dozens of them.
- Re-derive it blind. The figure is worked out independently from the source and only then compared with what we had. Agreement is evidence; a mismatch is a bug to be traced before anything ships.
- Corroborate. Where a second manufacturer publishes the same figure, we check it. Standard concrete mix is a good example — Sakrete and QUIKRETE agree on 0.60 ft³ for an 80 lb bag.
- Record the confidence level. Each dataset is tagged official (read from a spec sheet), corroborated (multiple independent sources agree), or low (genuinely variable, like stone density or any price). We publish the tag rather than implying every number is equally solid.
- Lock it in a test. Worked examples become automated assertions that run on every build. A change that would alter a published answer fails the build instead of quietly shipping.
Rounding: we round the way suppliers sell
Rounding is where most calculators lose people, because the honest mathematical answer isn’t purchasable. You cannot buy 61.4 bags. Our rules:
- Bags, gallons and boxes round up to whole units, always. Running 0.4 of a bag short means a second trip and a cold joint in your pour.
- Waste is applied before the round-up, not after. Ceiling first and then adding 10% double-counts the cushion and oversells you.
- Ready-mix rounds up to the 0.25 yd³ increment because that is how dispatch takes an order.
- Aggregate rounds up to the 0.5 ton, matching how quarries and haulers sell it.
One subtlety worth documenting because it bit us: floating-point arithmetic can turn an exact 88 into 88.000000000001, and a naive round-up then sells you an 89th bag you don’t need. Our round-up helper tolerates that noise to twelve significant figures, and the case is locked in a regression test. It is a small thing, but a calculator that is wrong by one bag on a round number is a calculator nobody trusts twice.
Waste factors
A waste factor covers spillage, uneven subgrade, over-excavation and the forms bulging slightly. It is a cushion, not a guarantee, and we always show it so you can change it.
| Material | Default | Why |
|---|---|---|
| Concrete | 10% | Industry range is 5–15%; subgrade that isn’t dead flat eats the difference |
| Gravel | 10% | Compaction and spillage during spreading |
| Mulch / topsoil | 0% | Loose fill with no cut waste — the quantity is exact for the area |
| Paint | 0% explicit | The cushion is built in instead: we don’t deduct doors and windows by default, and we use the conservative end of the coverage range |
That last row is a deliberate judgement call. Deducting a 20 sq ft door and a 15 sq ft window is technically more accurate, but cutting in around openings is slow, wasteful work, and the paint you “save” on the door is the paint you spend on the frame. Leaving openings in the wall area produces a more useful answer. You can switch deductions on in the calculator if you prefer the strict number.
The formulas, in full
Concrete
volume ft³ = length ft × width ft × (thickness in ÷ 12)
volume yd³ = volume ft³ ÷ 27
bags = ceil( volume ft³ × (1 + waste) ÷ yield per bag )
ready-mix = roundUpTo(0.25 yd³, volume yd³ × (1 + waste) ) | Bag size | Yield (ft³) | Bags per cubic yard |
|---|---|---|
| 40 lb | 0.3 | 90 |
| 50 lb | 0.375 | 72 |
| 60 lb | 0.45 | 60 |
| 80 lb | 0.6 | 45 |
| 90 lb | 0.675 | 40 |
Yields apply to standard concrete mix (roughly 3,500–4,000 PSI, general purpose). Fast-setting and other specialty mixes have different yields — check the bag. Above about 1 cubic yard we suggest ready-mix, because that is roughly where mixing bags by hand stops being sane; see bags vs ready-mix for the cost side of that decision.
Paint
wall area ft² = 2 × (length + width) × ceiling height
gallons = ceil( paintable area × coats ÷ coverage per gallon ) Default coverage is 350 sq ft per gallon per coat — the conservative end of the 350–400 range manufacturers publish for smooth drywall. Bare, porous or textured walls drop to about 250, which is a setting in the calculator rather than a footnote, because it changes the answer by a whole gallon on most rooms. Default is 2 coats. At 4 gallons or more we flag that a 5-gallon pail is usually cheaper than singles.
Mulch and topsoil
cubic yards = area ft² × depth in ÷ 324
bags = ceil( cubic yards × 27 ÷ bag size ft³ ) The 324 is not a lookup value, it is an identity: 27 ft³ per cubic yard × 12 inches per foot. One cubic yard covers 324 ft² one inch deep. We divide by it directly rather than multiplying by a rounded 0.0031 shortcut, which drifts about 0.4% — enough to change a bag count.
Gravel and aggregate
cubic yards = area ft² × depth in ÷ 324
tons = roundUpTo(0.5 ton, cubic yards × density × (1 + waste) ) Gravel is the one material where we insist you choose. Density varies enough between stone types that a single default would be misleading, so the density selector is mandatory in the calculator rather than hidden behind an “advanced” toggle:
| Stone | Tons per cubic yard | Confidence |
|---|---|---|
| Crushed stone (generic) | 1.4 | corroborated |
| Crushed gravel (¼–2 in) | 1.5 | corroborated |
| Crusher run / road base | 1.6 | corroborated |
| Large rock (2–6 in) | 1.25 | corroborated |
| Crushed limestone (dense) | 1.69 | low |
Even these are typical figures. Real density shifts with gradation, quarry and moisture — wet stone weighs more, so a rained-on load delivers less volume per ton than the table implies.
Beyond quantities: joints, reinforcement and time
The size pages carry more than a bag count — control-joint layouts, rebar and mesh takeoffs, pour logistics, paint supplies and job schedules. These come from the same tested libraries as the quantities, but they sit at a different confidence level and we label them accordingly: published residential rules of thumb and practical trade figures, not code minimums or manufacturer specifications. Anything structural still needs an engineer.
| Figure | Value | Basis |
|---|---|---|
| Control-joint spacing | Max spacing in feet = 2–3 × thickness in inches | ACI 302 / PCA residential guidance |
| Panel shape limit | 1.5 : 1 length-to-width | Long thin panels crack across the middle |
| Joint cut depth | ¼ of slab thickness, cut within 6–12 hours | Standard practice |
| Welded wire mesh sheet | 5 × 10 ft, lapped one 6″ square → 42.75 ft² effective | 6×6 W1.4/W1.4 stock size |
| Slab rebar grid | #3 or #4 at 16″ on centre each way, 20 ft stock | Residential slab-on-grade convention |
| Wheelbarrow load of concrete | ≈ 3 ft³ (~420 lb) | Weight-limited, well under heaped capacity |
| Paint rolling / cutting-in rate | 250 ft² per hour / 60 linear ft per hour | Unhurried DIY pace; a pro is roughly twice as fast |
Two of those deserve a note, because both are places calculators commonly go wrong. Mesh sheets must be counted on lapped coverage — 42.75 ft², not the nominal 50 — or you under-order by about 15% and discover it with the concrete already on the truck. And a wheelbarrow is limited by weight, not volume: concrete runs about 140 lb per cubic foot, so filling a 6 ft³ barrow would load it to 840 lb. Sizing loads by the barrow’s rated capacity produces a number nobody can actually push.
Never-NaN: what happens with bad input
Every calculation library on this site holds a contract: non-finite or
non-positive inputs return zero, never NaN and
never Infinity. Type a negative length or clear a field and you
get a blank-looking result, not the word “NaN” where a bag count
should be. It sounds trivial; it is the single most common failure in
browser-based calculators, and it is covered by tests.
Sources
| Dataset | Effective | Verification | Primary source |
|---|---|---|---|
| Concrete (bag yields) | 2026-06-28 | official | View source |
| Paint (coverage) | 2026-06-28 | corroborated | View source |
| Mulch / topsoil (coverage) | 2026-06-28 | corroborated | View source |
| Gravel / aggregate (density) | 2026-06-28 | corroborated | View source |
When we’re wrong
We publish estimates for a living, so being wrong occasionally is a certainty rather than a risk. When a reader shows us an error we re-derive the figure from the source, fix the page, add a test that would have caught it, and bump the page’s “last updated” date. If you think a number here is off, tell us — include the page, your inputs, and the figure you expected.
All of this is planning guidance, not engineering. See terms and disclaimer for the boundary, the editorial policy for how advertising is kept out of the numbers, and about for who writes it.