Client-side
Every calculation runs in your browser. Inputs do not leave your device and no account is required.
CountMaterials documents the formulas, constants, assumptions and rounding rules behind its calculators so a result can be understood and checked by hand.
Every calculation runs in your browser. Inputs do not leave your device and no account is required.
Bag yields, unit weights and construction references are documented rather than invented.
Bag counts round up and ready-mix orders use quarter-yard increments. The rules are visible.
A construction estimate is only useful when the person using it understands what the number represents.
CountMaterials separates the raw calculation from the practical order estimate. Volume, waste, bag yields and ready-mix rounding are shown rather than hidden.
The goal is not to replace local codes, supplier instructions or professional judgment. It is to make the arithmetic transparent enough to verify before buying material.
Every input is converted to the internal units used by the relevant construction formula.
The documented formula runs against the normalised values and applies the calculator's assumptions.
Outputs are checked for valid ranges, sensible rounding and safe handling of incomplete input.
netFt3 = length_ft × width_ft × (thickness_in / 12) × quantity grossFt3 = netFt3 × (1 + wastePercent) yards = grossFt3 / 27
bags80 = ceil(grossFt3 / 0.60) bags60 = ceil(grossFt3 / 0.45) bags40 = ceil(grossFt3 / 0.30)
order = max(0.25, ceil(yards × 4) / 4)
runsAcross = floor((width_ft - 0.5) / (spacing_in / 12)) + 1 runsAlong = floor((length_ft - 0.5) / (spacing_in / 12)) + 1 linearFeet = (runsAcross × length_ft) + (runsAlong × width_ft)
holeFt3 = π × (holeDiameter_in / 24)² × (holeDepth_in / 12) postFt3 = (postWidth_in / 12)² × (holeDepth_in / 12) netFt3 = (holeFt3 - postFt3) × postCount
netFt3 = length_ft × width_ft × (depth_in / 12) grossFt3 = netFt3 × (1 + wastePercent) yards = grossFt3 / 27 tons = yards × (density_lb_per_yd3 / 2000) cost = tons × price_per_ton
projectAreaFt2 = length_ft × width_ft paverAreaFt2 = (paverLength_in × paverWidth_in) / 144 rawCount = projectAreaFt2 / paverAreaFt2 orderCount = ceil(rawCount × (1 + wastePercent))
netWallFt2 = max(0, wallLength_ft × wallHeight_ft - openings_ft2) moduleAreaFt2 = ((brickLength_in + joint_in) × (brickHeight_in + joint_in)) / 144 bricksPerFt2 = 1 / moduleAreaFt2 orderCount = ceil(netWallFt2 × bricksPerFt2 × (1 + wastePercent))
adjustedUnits = unitCount × (1 + wastePercent) bags80 = ceil(adjustedUnits / coverage80) bags60 = ceil(adjustedUnits / coverage60) Defaults from Sakrete yield data: brick: coverage80 = 35, coverage60 = 26 8-in block: coverage80 = 12, coverage60 = 9
Blank, zero or negative dimensions do not produce NaN or Infinity.
Minimum quantity is one and fractional slabs are not treated as physical orders.
Waste defaults to 10% and is constrained to the calculator's supported range.
Bag counts round up and ready-mix orders use practical quarter-yard increments.
Constants and assumptions are documented so users can understand where the numbers come from and verify them against the cited references.
About CountMaterials →Report a calculation issue and we’ll review the formula, units or assumptions.