Calculate tip and total for any bill with preset percentages (10–25%) or a custom rate. Split among up to 100 people — see per-person breakdown instantly.
Tip percentage
Enter a bill amount to calculate tip
Gratuity (tipping) is a customary practice in hospitality, dining, and service industries worldwide. Calculating an appropriate tip, incorporating sales tax correctly, and splitting the total among party members requires transparent mathematical formulas to avoid overpaying or underpaying service staff.
Standard etiquette dictates that tips should be calculated against the pre-tax subtotal of the service bill:
$$\text{Tip Amount} = \text{Subtotal} \times \left(\frac{\text{Tip Percentage}}{100}\right)$$ $$\text{Total Bill} = \text{Subtotal} + \text{Tax} + \text{Tip Amount}$$ $$\text{Per Person Share} = \frac{\text{Total Bill}}{\text{Number of People}}$$
| Tip Percentage | Service Quality Benchmark | When Customary |
|---|---|---|
| 10% | Basic / Acceptable | Casual counter service or standard European restaurant service |
| 15% | Good / Standard | Standard service in North America; traditional baseline |
| 18% - 20% | Excellent / Attentive | Modern standard for full-service sit-down dining |
| 25%+ | Exceptional / Outstanding | High-end hospitality, large catered groups, holiday seasons |
Many automated payment terminals calculate tip percentages on the post-tax total by default. Calculating tip on top of sales tax means you are paying gratuity on government taxes rather than on the value of the food and service. On a £200 meal with 20% VAT, tipping 20% on the gross total adds an extra £8 to your tip compared to tipping on the pre-tax bill.
JavaScript
function calculateBill({ subtotal, tipPercent = 18, taxRate = 0, splitCount = 1 }) {
const tipAmount = subtotal * (tipPercent / 100);
const taxAmount = subtotal * (taxRate / 100);
const total = subtotal + taxAmount + tipAmount;
const perPerson = total / Math.max(1, splitCount);
return {
tipAmount: Number(tipAmount.toFixed(2)),
taxAmount: Number(taxAmount.toFixed(2)),
total: Number(total.toFixed(2)),
perPerson: Number(perPerson.toFixed(2))
};
}
This website and utility are provided for general informational, calculation, and educational purposes only. Always verify critical computation outputs prior to professional deployment or financial use. See our Terms of Service and Privacy Policy for full governance details.