Net Run Rate (NRR) is a statistical method used in cricket to rank teams with equal points in league tables. Whether it's the IPL, World Cup, or local tournaments, NRR is the ultimate tie-breaker that determines which team advances to the playoffs.
The NRR Formula
NRR = (Total Runs Scored / Total Overs Faced) – (Total Runs Conceded / Total Overs Bowled)
Critical Rules for Calculation
All-Out Rule: If a team is bowled out before their allotted overs (e.g., 50 overs in an ODI), the calculation still uses the full quota of overs they were scheduled to play.
Over Conversion: Since an over has 6 balls, you cannot use decimals normally. 10.1 overs is actually 10.166, 10.2 is 10.333, and so on. Our calculator handles this conversion automatically.
Abandoned Matches: Matches with no result are generally excluded from the NRR cumulative total.
Example Calculation
Suppose Team A scores 300 runs in 50 overs and concedes 250 runs in 50 overs.
Team A Run Rate: 300 / 50 = 6.000
Opponent Run Rate: 250 / 50 = 5.000
Net Run Rate: 6.000 – 5.000 = +1.000
function calculateNRR() {
var runsScored = parseFloat(document.getElementById('runsScored').value);
var oversFacedInput = parseFloat(document.getElementById('oversFaced').value);
var runsConceded = parseFloat(document.getElementById('runsConceded').value);
var oversBowledInput = parseFloat(document.getElementById('oversBowled').value);
if (isNaN(runsScored) || isNaN(oversFacedInput) || isNaN(runsConceded) || isNaN(oversBowledInput)) {
alert("Please enter valid numbers in all fields.");
return;
}
// Helper to convert over notation (e.g. 20.3) to decimal (20.5)
function convertOversToDecimal(ov) {
var wholeOvers = Math.floor(ov);
var balls = Math.round((ov – wholeOvers) * 10);
if (balls >= 6) {
// Handle case where user might enter .6 or higher accidentally
wholeOvers += Math.floor(balls / 6);
balls = balls % 6;
}
return wholeOvers + (balls / 6);
}
var decOversFaced = convertOversToDecimal(oversFacedInput);
var decOversBowled = convertOversToDecimal(oversBowledInput);
if (decOversFaced === 0 || decOversBowled === 0) {
alert("Overs cannot be zero.");
return;
}
var forRR = runsScored / decOversFaced;
var againstRR = runsConceded / decOversBowled;
var nrr = forRR – againstRR;
var resultDiv = document.getElementById('nrrResult');
var valDiv = document.getElementById('nrrValue');
var analysisDiv = document.getElementById('nrrAnalysis');
resultDiv.style.display = 'block';
valDiv.innerHTML = (nrr > 0 ? "+" : "") + nrr.toFixed(3);
if (nrr > 0) {
resultDiv.style.backgroundColor = "#e8f5e9";
valDiv.style.color = "#2e7d32";
analysisDiv.innerHTML = "Strong Performance! Your team has a Positive Net Run Rate.";
} else if (nrr < 0) {
resultDiv.style.backgroundColor = "#ffebee";
valDiv.style.color = "#c62828";
analysisDiv.innerHTML = "Warning: Your team has a Negative Net Run Rate.";
} else {
resultDiv.style.backgroundColor = "#f5f5f5";
valDiv.style.color = "#424242";
analysisDiv.innerHTML = "Neutral Net Run Rate.";
}
}