Percent Off Calculator
Use this percent off calculator to find the sale price and amount saved from an original price and discount. It also covers percentage off and percentage discount sums, with stacked discounts, sales tax, 50 percent off and the discount from two prices.
Example values are filled in. Replace them with your own.
Sale price
90.00
Working
- 120 − 25% (30.00) = 90.00
- You save
- 30.00
A jacket is marked $249.99 with 15% off. What do you actually pay, and how much do you save? And if a second 10% coupon applies, is that 25% off or something less?
Enter the original price and the percent off into this percent off calculator. The calculator returns the sale price and the amount saved, and lets you add a second discount and sales tax. It can also work backwards: give it the original and sale prices and it finds the discount.
How percent off works
Quick answer: multiply the original price by the percent off divided by 100 to get the amount saved, then subtract it from the original price. 20% off $80 saves $16 and leaves a sale price of $64.
How to calculate percent off
saved = original price * percent off / 100sale price = original price * (1 - percent off / 100)- Divide the percent off by 100 to turn it into a decimal (20% becomes 0.20).
- Multiply by the original price to get the amount saved.
- Subtract the amount saved from the original price to get the sale price.
Quick mental maths for common discounts
For 10% off, move the decimal point one place left to get the saving, then subtract it. For 20% off, double that tenth. For 15%, add half of the tenth to the tenth. For 25% off, take a quarter of the price, and for 50% off, halve it. On $80 a tenth is $8, so 20% off saves $16 and 15% off saves $12. Use mental maths for a quick check in the shop, and the percentage off calculator whenever a second discount or tax is involved.
Stacking two discounts
A second discount applies to the already reduced price, not the original, so the two percentages never simply add. Multiply the two remaining shares: 20% off then 10% off leaves 0.80 × 0.90 = 0.72 of the price, which is 28% off in total. On the $249.99 jacket, 15% off then 10% off leaves 0.85 × 0.90 = 0.765 of the price, so $191.24 and 23.5% off, not 25%.
Percent off with sales tax
In many US checkouts the discount comes first and tax is charged on the sale price. Multiply the sale price by the tax rate to get the tax, then add it. Both steps are multiplications, so taking tax first gives the same total. Some places and coupon types charge tax on the pre-discount price instead, which costs more, so check how your store does it.
How to find the discount from two prices
To calculate the percentage discount, divide the amount saved by the original price, not the sale price, and multiply by 100. The percentage discount formula is (original − sale) ÷ original × 100. A $60 item on sale for $45 is 25% off. Use the two-price mode of the percentage discount calculator above to run it.
How to find the original price
If you only know the sale price and the percent off, divide the sale price by (1 − percent off ÷ 100). A sale price of $64 after 20% off came from 64 ÷ 0.80 = $80. The reverse percentage calculator does this in one step.
Percent off examples
Common percentages off an $80 item:
| Percent off | Amount saved | Sale price |
|---|---|---|
| 10% | $8.00 | $72.00 |
| 15% | $12.00 | $68.00 |
| 20% | $16.00 | $64.00 |
| 25% | $20.00 | $60.00 |
| 30% | $24.00 | $56.00 |
| 50% | $40.00 | $40.00 |
Example 1: 20% off $80
Given
Step 1
0.20 × 80 = 16.
Answer
Example 2: 15% off $249.99, with rounding
Given
Step 1
0.15 × 249.99 = 37.4985, which rounds to $37.50 saved.
Answer
Example 3: 20% off, then 10% off $100
Given
Step 1
After the first discount the price is $80.
Answer
Example 4: 25% off $120 with 8% sales tax
Given
Step 1
25% off leaves $90.
Answer
Example 5: finding the percent off from two prices
Given
Step 1
The saving is $15, and 15 ÷ 60 = 0.25.
Answer
Percent off code
Both versions reproduce the examples above ($64.00, $212.49, $72.00 and $97.20 with tax) and reject a percent outside 0 to 100.
JavaScript
const round2 = (x) => Math.round((x + Number.EPSILON) * 100) / 100;function check(name, v, max = Infinity) { if (typeof v !== "number" || !Number.isFinite(v)) throw new TypeError(`${name} must be a finite number`); if (v < 0 || v > max) throw new RangeError(`${name} must be between 0 and ${max}`);}export function percentOff(price, percentOff, { secondPercentOff = 0, taxPercent = 0 } = {}) { check("price", price); check("percentOff", percentOff, 100); check("secondPercentOff", secondPercentOff, 100); check("taxPercent", taxPercent, 100); const salePrice = price * (1 - percentOff / 100) * (1 - secondPercentOff / 100); const tax = salePrice * (taxPercent / 100); return { salePrice: round2(salePrice), saved: round2(price - salePrice), tax: round2(tax), total: round2(salePrice + tax), };}export function discountFromPrices(original, sale) { check("original", original); check("sale", sale); if (original === 0) throw new RangeError("original must be greater than 0"); if (sale > original) throw new RangeError("sale must not exceed original"); return ((original - sale) / original) * 100;}Python
from decimal import Decimal, ROUND_HALF_UPimport mathCENT = Decimal("0.01")def _num(name, v, hi=None): if isinstance(v, bool) or not isinstance(v, (int, float, Decimal)) or not math.isfinite(float(v)): raise ValueError(f"{name} must be a finite number") v = Decimal(str(v)) if v < 0 or (hi is not None and v > hi): raise ValueError(f"{name} is out of range") return vdef percent_off(price, percent_off, second_percent_off=0, tax_percent=0): price = _num("price", price) p1 = _num("percent_off", percent_off, 100) p2 = _num("second_percent_off", second_percent_off, 100) tax_p = _num("tax_percent", tax_percent, 100) sale = price * (1 - p1 / 100) * (1 - p2 / 100) tax = sale * tax_p / 100 q = lambda x: x.quantize(CENT, rounding=ROUND_HALF_UP) return {"sale_price": q(sale), "saved": q(price - sale), "tax": q(tax), "total": q(sale + tax)}Use Decimal (Python) or integer cents for money. Binary floats can land a half-cent on the wrong side.
Privacy and input safety
Prices are calculated in your browser. The numbers you enter are not sent to a server or stored.
- A percent off below 0 or above 100 is refused, because a negative discount is a price increase and more than 100% off would give a negative price.
- A comma followed by exactly three digits is read as a thousands separator, so 1,200 is 1200. Any other comma is a decimal point, so 12,50 is 12.50, and a number starting with 0, such as 0,500, is read as a decimal. Mixed formats such as 1.234,5 and ambiguous entries such as 1,2,3 are refused instead of guessed. Spaces, including no-break spaces, between digit groups are ignored.
Common percent off mistakes
| Mistake | What goes wrong | What the calculator does |
|---|---|---|
| Adding stacked percentages | 20% then 10% off $100 is not 30% off ($70); the correct price is $72 | Multiplies the remaining shares and shows the combined percent |
| Dividing by the sale price to find the percent off | $15 ÷ $45 gives 33.3% instead of 25% | Always divides by the original price |
| Treating the percent as dollars | 20% off $80 read as 80 − 20 = $60 instead of $64 | Converts the percent to a share of the price |
| Rounding at every step | The last cent drifts | Rounds only the final amounts |
| Charging tax on the original price | Total of $99.60 instead of $97.20 on Example 4 | Charges tax on the sale price and says so |
| A percent off above 100 or below 0 | Gives a negative price or a price rise | Refuses the value with a message |
| Reading buy 2 get 1 free as 50% off | You pay for 2 of 3 items, which is 33.3% off each | Enter 33.33 as the percent off |
Percent off vs discount vs markdown vs markup
| Term | Formula | Base | Used for |
|---|---|---|---|
| Percent off, discount | original × percent ÷ 100 | Original price | The saving a shopper sees |
| Markdown | (original − new) ÷ original × 100 | Original price | The same reduction, in a retailer's words |
| Percentage decrease | (old − new) ÷ old × 100 | Starting value | Any fall in a value, not only prices |
| Percentage increase | (new − old) ÷ old × 100 | Starting value | Price rises, the opposite direction |
| Markup | (price − cost) ÷ cost × 100 | Seller's cost | What a seller adds to cost, not a shopper discount |
Percent off and markdown describe the same reduction. The percentage decrease calculator and percentage increase calculator cover those two rows for any value, not only prices. Markup uses the seller's cost as its base, so a 50% markup is not the same as a 50% margin or a 50% discount.