Business Mileage Calculator

Calculate your business mileage effortlessly with our authoritative Business Mileage Calculator. Optimize your travel expenses efficiently.

Mileage Inputs

Enter the starting and ending odometer readings along with the IRS reimbursement rate that applies to your trip.

How to Use This Calculator

Track your odometer readings for the start and end of each trip, then supply the current IRS mileage reimbursement rate. Use the Calculate button to see the total reimbursable miles and the amount you can claim for expense reporting.

Methodology

All calculations are based on the official IRS reimbursement rates for business mileage. For more details, refer to the IRS website. All calculations are strictly based on the formulas and data provided by this source.

Glossary of Terms

  • Start Mileage: The odometer reading at the start of the trip.
  • End Mileage: The odometer reading at the end of the trip.
  • Rate per Mile: The reimbursement rate per mile as set by the IRS.
  • Reimbursement Amount: The total reimbursement based on the mileage and rate.

How It Works: A Step-by-Step Example

Imagine you drove from your office to a client meeting. Your odometer read 1,000 miles at the start and 1,050 miles at the end. If the IRS rate is $0.58 per mile, your reimbursement would be calculated as follows:

Reimbursement = (1,050 - 1,000) × $0.58 = $29.00

Frequently Asked Questions (FAQ)

How do I calculate my business mileage?

Subtract your start mileage from your end mileage and multiply by the rate per mile.

What is the current IRS mileage rate?

The rate can change annually. Check the IRS website for the latest information.

Can I include personal trips in my business mileage?

No, only business-related travel is eligible for reimbursement.

How do I record my mileage accurately?

Use a mileage log or an app to track your miles driven for business purposes.

What documents should I keep for mileage claims?

Maintain a log with dates, start and end mileage, destinations, and business purpose.

Verified by Ugo Candido Last Updated: 2026-01-19 Version 0.1.0-draft
Changelog
Version: 0.1.0-draft
Last code update: 2026-01-19
  • Initial audit spec draft generated from HTML extraction (review required).
  • Verify formulas match the calculator engine and convert any text-only formulas to LaTeX.
  • Confirm sources are authoritative and relevant to the calculator methodology.
Formulas
Reimbursement = (End Mileage - Start Mileage) × Rate per Mile
Citations

IRS website — irs.gov · Accessed 2026-01-19
https://www.irs.gov/

Version 1.5.0
+ round2(safe).toFixed(2); } }; const fmtMiles = (val) => { const safe = Number.isFinite(val) ? val : 0; return new Intl.NumberFormat('en-US', { maximumFractionDigits: 2 }).format(round2(Math.max(0, safe))); }; const debounce = (fn, delay = 100) => { let timer; return (...args) => { clearTimeout(timer); timer = setTimeout(() => fn(...args), delay); }; }; const toNumber = (value) => { const parsed = parseFloat(value); return Number.isFinite(parsed) ? parsed : 0; }; const els = { startMileage: document.getElementById('startMileage'), endMileage: document.getElementById('endMileage'), ratePerMile: document.getElementById('ratePerMile'), totalMileage: document.getElementById('totalMileage'), reimbursementAmount: document.getElementById('reimbursementAmount'), rateValue: document.getElementById('rateValue'), errorBox: document.getElementById('errorBox'), calcBtn: document.getElementById('calcBtn'), resetBtn: document.getElementById('resetBtn') }; function parseInputs() { return { startMileage: toNumber(els.startMileage.value), endMileage: toNumber(els.endMileage.value), ratePerMile: toNumber(els.ratePerMile.value) }; } function validate(inputs) { const errors = []; if (inputs.startMileage < 0) errors.push('Start mileage must be 0 or greater.'); if (inputs.endMileage < 0) errors.push('End mileage must be 0 or greater.'); if (inputs.ratePerMile < 0) errors.push('Rate per mile must be 0 or greater.'); if (inputs.endMileage < inputs.startMileage) errors.push('End mileage must be greater than or equal to start mileage.'); return { ok: errors.length === 0, errors }; } function compute(inputs) { const totalMiles = inputs.endMileage - inputs.startMileage; const reimbursement = totalMiles * inputs.ratePerMile; if (!Number.isFinite(totalMiles) || !Number.isFinite(reimbursement)) return null; return { totalMiles: Math.max(0, totalMiles), reimbursement: Math.max(0, reimbursement), ratePerMile: inputs.ratePerMile }; } function format(outputs) { return { totalMileageLabel: fmtMiles(outputs.totalMiles) + ' miles', reimbursementLabel: fmtCurrency(outputs.reimbursement), rateLabel: fmtCurrency(outputs.ratePerMile) + ' / mile' }; } function render(formatted, errors) { if (errors && errors.length) { els.errorBox.style.display = 'block'; els.errorBox.textContent = errors.join(' '); } else { els.errorBox.style.display = 'none'; els.errorBox.textContent = ''; } if (!formatted) { els.totalMileage.textContent = '0 miles'; els.reimbursementAmount.textContent = '$0.00'; els.rateValue.textContent = '$0.00 / mile'; return; } els.totalMileage.textContent = formatted.totalMileageLabel; els.reimbursementAmount.textContent = formatted.reimbursementLabel; els.rateValue.textContent = formatted.rateLabel; } function update() { const inputs = parseInputs(); const validation = validate(inputs); if (!validation.ok) { render(null, validation.errors); return; } const outputs = compute(inputs); if (!outputs) { render(null, ['Unable to compute results with the provided values.']); return; } const formatted = format(outputs); render(formatted, []); } els.calcBtn.addEventListener('click', update); els.resetBtn.addEventListener('click', () => { els.startMileage.value = ''; els.endMileage.value = ''; els.ratePerMile.value = ''; const debouncedUpdate = debounce(update, 100); document.querySelectorAll('#inputsCard input, #inputsCard select, #inputsCard textarea') .forEach((el) => { el.addEventListener('input', debouncedUpdate); el.addEventListener('change', debouncedUpdate); }); update(); }); input.addEventListener('change', debouncedUpdate); }); update(); })();