Calculate NRR for Cricket Tournaments (IPL, World Cup, Leagues)
Your Team's Batting Stats
*If All Out, enter full quota (e.g., 20 overs, 0 balls).
Opponent's Batting Stats (Your Bowling)
*If Opponent All Out, enter full quota.
Net Run Rate
0.000
Your Scoring Rate
0.00
Opponent Scoring Rate
0.00
How to Calculate Net Run Rate in T20 Cricket
Net Run Rate (NRR) is the preferred method for breaking ties in cricket tournaments, particularly in the T20 format like the IPL, Big Bash, and ICC World Cups. It represents a team's relative performance against their opponents by comparing scoring rates.
The NRR Formula
The calculation involves two main components: your team's scoring rate and the rate at which you concede runs.
Runs Scored / Overs Faced: Average runs your team scores per over.
Runs Conceded / Overs Bowled: Average runs your opponents score against you per over.
Critical Calculation Rules
To calculate NRR accurately, you must follow specific cricket conventions:
Decimal Overs Conversion: Cricket notation like "19.4 overs" is not a mathematical decimal. It means 19 overs and 4 balls. To calculate, convert balls into a fraction of an over (divide by 6). Example: 19.4 overs = 19 + (4/6) = 19.667 mathematical overs.
The "All Out" Rule: This is the most common mistake. If a team is bowled out (loses all 10 wickets) before completing their full quota of 20 overs, the calculation uses the full quota (20 overs) as the divisor, not the actual overs faced.
Example Calculation
Imagine Team A plays a single T20 match against Team B.
Phase
Score
Overs
Calculation Logic
Team A Batting
180/5
20.0
Rate = 180 / 20 = 9.00
Team B Batting (Opponent)
165/8
20.0
Rate = 165 / 20 = 8.25
NRR for Team A: 9.00 – 8.25 = +0.750
Calculating NRR Across a Tournament
NRR is cumulative. To calculate it for a whole season:
Sum the total runs scored in all matches.
Sum the total valid overs faced in all matches (applying the All Out rule where necessary).
Calculate the cumulative scoring rate.
Do the same for runs conceded and overs bowled.
Subtract the cumulative conceding rate from the cumulative scoring rate.
function calculateNRR() {
// Get Input Values
var teamRuns = parseFloat(document.getElementById('teamRuns').value);
var teamOvers = parseFloat(document.getElementById('teamOvers').value);
var teamBalls = parseFloat(document.getElementById('teamBalls').value);
var oppRuns = parseFloat(document.getElementById('oppRuns').value);
var oppOvers = parseFloat(document.getElementById('oppOvers').value);
var oppBalls = parseFloat(document.getElementById('oppBalls').value);
// Validation
if (isNaN(teamRuns) || isNaN(teamOvers) || isNaN(oppRuns) || isNaN(oppOvers)) {
alert("Please enter valid numbers for Runs and Overs.");
return;
}
// Handle empty balls input as 0
if (isNaN(teamBalls)) teamBalls = 0;
if (isNaN(oppBalls)) oppBalls = 0;
// Calculate Total Mathematical Overs (Overs + Balls/6)
// Note: In cricket, if a team is all out, the overs count as full quota (usually 20).
// The user is instructed to input the adjusted value, but we calculate based on raw input here.
var totalTeamOversDec = teamOvers + (teamBalls / 6.0);
var totalOppOversDec = oppOvers + (oppBalls / 6.0);
// Avoid Division by Zero
if (totalTeamOversDec === 0 || totalOppOversDec === 0) {
alert("Overs faced cannot be zero.");
return;
}
// Calculate Run Rates
var teamRunRate = teamRuns / totalTeamOversDec;
var oppRunRate = oppRuns / totalOppOversDec;
// Calculate NRR
var netRunRate = teamRunRate – oppRunRate;
// Display Results
var resultContainer = document.getElementById('result-container');
var nrrDisplay = document.getElementById('nrrResult');
var teamRateDisplay = document.getElementById('teamRateDisplay');
var oppRateDisplay = document.getElementById('oppRateDisplay');
// Formatting NRR (Standard is usually 3 decimal places)
var formattedNRR = netRunRate.toFixed(3);
if (netRunRate > 0) {
formattedNRR = "+" + formattedNRR;
nrrDisplay.className = "result-value positive";
resultContainer.style.background = "#e8f5e9";
} else if (netRunRate < 0) {
nrrDisplay.className = "result-value negative";
resultContainer.style.background = "#ffebee";
} else {
nrrDisplay.className = "result-value";
resultContainer.style.background = "#f5f5f5";
}
nrrDisplay.innerText = formattedNRR;
teamRateDisplay.innerText = teamRunRate.toFixed(2);
oppRateDisplay.innerText = oppRunRate.toFixed(2);
resultContainer.style.display = "block";
resultContainer.scrollIntoView({ behavior: 'smooth' });
}