Planning a patio, driveway, or shed foundation requires accurate measurements to ensure you purchase the right amount of material. Concrete is measured in cubic yards when ordered from a ready-mix truck, or in bags (60lb or 80lb) when mixing it yourself for smaller projects.
The Concrete Formula
To calculate the volume of concrete needed for a rectangular slab, use the following steps:
Convert all dimensions to feet. If your depth is in inches, divide by 12. For example, a 4-inch slab is 0.33 feet deep.
Calculate Cubic Yards: Divide the total Cubic Feet by 27 (since there are 27 cubic feet in one cubic yard).
Pro Tip: Always include a margin of error (waste factor). Spillage, uneven subgrades, and form settling can require 5-10% more concrete than the perfect mathematical volume.
Bags vs. Ready-Mix Truck
When should you buy bags, and when should you call a truck?
Use Bags (Pre-mix): For projects requiring less than 1 cubic yard (approx. 45 bags of 80lb mix). This is ideal for fence posts, small walkways, or equipment pads.
Order a Truck: For projects over 1 cubic yard. Mixing more than 50 bags by hand is labor-intensive and makes it difficult to achieve a consistent cure across the slab.
Bag Yields
Different bag sizes yield different volumes of cured concrete:
80lb Bag: Yields approximately 0.60 cubic feet.
60lb Bag: Yields approximately 0.45 cubic feet.
Our calculator above uses these standard yield rates combined with your selected waste factor to ensure you don't run out of material mid-pour.
function calculateConcrete() {
// 1. Get Input Values
var lenStr = document.getElementById("concLength").value;
var widStr = document.getElementById("concWidth").value;
var depStr = document.getElementById("concDepth").value;
var wasteStr = document.getElementById("concWaste").value;
var priceStr = document.getElementById("concPrice").value;
// 2. Parse Floats
var length = parseFloat(lenStr);
var width = parseFloat(widStr);
var depth = parseFloat(depStr);
var wastePercent = parseFloat(wasteStr);
var pricePerBag = parseFloat(priceStr);
// 3. Validation
if (isNaN(length) || isNaN(width) || isNaN(depth) || length <= 0 || width <= 0 || depth 0) {
totalCost = bags80 * pricePerBag;
costDisplay = "$" + totalCost.toFixed(2);
}
// 5. Display Results
document.getElementById("resVolumeYards").innerText = totalVolumeYards.toFixed(2) + " Cubic Yards";
document.getElementById("resVolumeFeet").innerText = totalVolumeFeet.toFixed(2) + " cu ft";
document.getElementById("resBags80").innerText = bags80;
document.getElementById("resBags60").innerText = bags60;
document.getElementById("resCost").innerText = costDisplay;
// Show result container
document.getElementById("concResult").style.display = "block";
}