Calculate the NRR for league tables and tournaments.
Your Team's Batting Figures (Scored)
Format: 19.4 means 19 overs and 4 balls. If All Out, enter full quota (e.g. 20.0).
Your Team's Bowling Figures (Conceded)
Format: Overs bowled to the opponent. If opponent All Out, enter full quota.
Net Run Rate
0.000
How to Calculate Net Run Rate (NRR) in Cricket
Net Run Rate (NRR) is the preferred method for ranking teams with equal points in limited-overs cricket tournaments like the IPL, ICC World Cup, and T20 leagues. It measures a team's winning margin or losing margin relative to the number of overs played.
Essentially, NRR is the difference between a team's average runs scored per over and the average runs conceded per over.
Understanding the Calculation
The calculation involves two main parts:
Team's Run Rate: The total runs scored by the team divided by the total overs faced.
Opponent's Run Rate: The total runs scored by the opponent (runs conceded by you) divided by the total overs bowled.
Subtracting the Opponent's Run Rate from the Team's Run Rate gives you the Net Run Rate. A positive value indicates the team is scoring faster than it is conceding, while a negative value indicates the opposite.
Important Rules for NRR
Decimal Overs: In cricket, overs are often written as 10.4 (10 overs and 4 balls). However, mathematically, 4 balls is not 0.4 overs. Since an over has 6 balls, 4 balls equals 4/6 or roughly 0.666 overs. This calculator automatically converts cricket notation (e.g., 10.4) into mathematical decimals for accuracy.
All Out Scenarios: This is the most critical rule. If a team is bowled out (All Out) before completing their full quota of overs (e.g., in 18.2 overs in a 20-over match), the NRR calculation uses the full quota of overs (20.0) as the divisor, not the actual overs faced. This penalizes the team for losing all wickets.
Abandoned Matches: Matches that are abandoned without a result generally do not contribute to NRR calculations.
Example Calculation
Imagine Team A plays a T20 match:
Batting: Team A scores 160 runs in 20.0 overs.
Bowling: Team A restricts the opponent to 140 runs in 20.0 overs.
function calculateNRR() {
// 1. Get Input Values
var runsScoredInput = document.getElementById('runsScored').value;
var oversFacedInput = document.getElementById('oversFaced').value;
var runsConcededInput = document.getElementById('runsConceded').value;
var oversBowledInput = document.getElementById('oversBowled').value;
// 2. Validate Inputs
if (runsScoredInput === "" || oversFacedInput === "" || runsConcededInput === "" || oversBowledInput === "") {
alert("Please fill in all fields to calculate NRR.");
return;
}
var runsScored = parseFloat(runsScoredInput);
var oversFaced = parseFloat(oversFacedInput);
var runsConceded = parseFloat(runsConcededInput);
var oversBowled = parseFloat(oversBowledInput);
// Check for negative numbers
if (runsScored < 0 || oversFaced <= 0 || runsConceded < 0 || oversBowled 1) {
// Handle cases where user types 10.1 (1 ball)
var decimalPart = parts[1];
// Take only the first digit if multiple exist to ensure 10.1 is treated as 1 ball, not 10 balls
var ballDigit = parseInt(decimalPart.substring(0, 1));
balls = ballDigit;
}
// Validation: Balls cannot be 6 or more in standard notation (e.g. 10.6 is invalid, it's 11.0)
if (balls >= 6) {
// If user enters .6, treat as full over. This is loose error handling but helpful.
// Better to clamp or alert, but for calculator flow, we calculate purely.
// Let's stick to pure math: ball / 6
}
return completedOvers + (balls / 6);
}
// 4. Perform Conversions
var mathOversFaced = convertOversToMath(oversFaced);
var mathOversBowled = convertOversToMath(oversBowled);
// 5. Calculate Rates
var battingRunRate = runsScored / mathOversFaced;
var bowlingRunRate = runsConceded / mathOversBowled;
// 6. Calculate NRR
var netRunRate = battingRunRate – bowlingRunRate;
// 7. Format Result (standard is 3 decimal places)
var formattedNRR = netRunRate.toFixed(3);
if (netRunRate > 0) {
formattedNRR = "+" + formattedNRR;
}
// 8. Update UI
var resultDiv = document.getElementById('nrrResult');
var valueDiv = document.getElementById('nrrValue');
var detailsDiv = document.getElementById('breakdown');
resultDiv.style.display = "block";
valueDiv.innerHTML = formattedNRR;
// Dynamic coloring
if (netRunRate >= 0) {
valueDiv.style.color = "#2e7d32"; // Green
} else {
valueDiv.style.color = "#c62828"; // Red
}
// Detailed Breakdown
detailsDiv.innerHTML = `
Team Run Rate: ${runsScored} runs / ${oversFaced} overs (${mathOversFaced.toFixed(4)} math) = ${battingRunRate.toFixed(4)}