A four-in-one percentage calculator: find X% of Y, express X as a percentage of Y, calculate the percentage change between two numbers, and compute discount price plus savings. Percent literally means "per hundred", so all formulas come down to (part / whole) × 100. The discount tool is especially handy for sale shopping and tip math.
How to use
Choose the calculation type that matches your question.
Type the two numbers into the input fields.
Read the result instantly — no submit button needed.
For percentage change, positive values mean increase, negative means decrease.
For discount, enter the original price and the rate to see savings and final price.
Common use cases
Calculating restaurant tips and bill splits.
Working out sale prices and seasonal discounts.
Comparing year-over-year revenue or growth.
Tracking weight loss or fitness improvements as a percent.
Checking VAT or sales-tax inclusive prices.
Frequently asked questions
Q. How is percentage change calculated?
A. The formula is ((new − old) / old) × 100. The result is positive for an increase, negative for a decrease.
Q. Why is the result NaN or Infinity?
A. You probably divided by zero (e.g., the "whole" or "from" value is 0). Enter a non-zero denominator.
Q. Can I do tax-inclusive math?
A. Yes. Use "X% of Y" with the tax rate to get the tax amount, then add to the original price.
Q. Does negative discount mean a markup?
A. Yes. A negative discount rate increases the final price beyond the original.
The most counterintuitive piece of percentage math is asymmetric recovery: losses and gains do not cancel out the way most people expect. If a $100 stock drops 50% to $50, it must rise 100% — not 50% — to return to $100. This is because the gain percentage is calculated against the new, smaller base, not the original. The general formula for required recovery after a loss of L% is: gain_required = L / (100 − L) × 100. Plug in 50% loss: 50 / (100 − 50) × 100 = 100%. Plug in 30% loss: 30 / 70 × 100 = 42.9%. Plug in 80% loss: 80 / 20 × 100 = 400%. The relationship is wildly nonlinear at the extremes.
Real-world stakes are huge. The S&P 500 dropped about 56% peak-to-trough in the 2007–2009 financial crisis (October 2007 to March 2009 by closing levels). To return to the previous peak required a roughly 127% gain, which actually took until March 2013 — about four years of recovery. The Nasdaq fell about 78% in the dot-com bust from March 2000 to October 2002, requiring a ~355% gain to recover; that recovery took 15 years, finally completing in April 2015. Bitcoin's 2018 crash was about 84% peak-to-trough, demanding a 525% gain to return — which it did, but took roughly three years.
The asymmetry means risk management matters more than people instinctively assume. A portfolio with 20% annual standard deviation (typical for an all-equity portfolio) experiences losses of 20%+ in roughly 16% of years (assuming roughly normal distribution — real markets have fatter left tails). Each such drawdown requires a 25%+ subsequent gain just to recover. This is the mathematical reason why "smooth" returns compound faster than "lumpy" returns of the same arithmetic average. It is also why position sizing for traders typically caps single-position loss at 1–2% of portfolio: a 50% portfolio drawdown from a single bad trade requires doubling the surviving capital just to break even, while a 2% drawdown requires only ~2.04% recovery.
Practical mitigations: (1) Diversification reduces portfolio standard deviation without proportionally reducing return — Markowitz mean-variance optimization (Nobel Prize 1990) formalizes this. (2) Rebalancing forces buying after losses and selling after gains, mechanically harvesting the asymmetry. (3) Time horizon matters because longer windows allow recovery — Vanguard research shows the worst 30-year rolling period for a 60/40 portfolio since 1928 still produced positive real returns. The asymmetric-recovery math is the reason "buy and hold" works better the longer you hold. Educational only — not financial advice.
// Recovery required after a percentage loss
function recoveryNeeded(lossPct) {
return lossPct / (100 - lossPct) * 100;
}
recoveryNeeded(10); // 11.11% (modest loss, modest recovery)
recoveryNeeded(30); // 42.86%
recoveryNeeded(50); // 100.00% (need to double the remaining)
recoveryNeeded(80); // 400.00% (5x the remaining)
recoveryNeeded(90); // 900.00% (10x the remaining)
// Real market drawdowns
recoveryNeeded(56); // 127.27% — S&P 500 2007-09
recoveryNeeded(78); // 354.55% — Nasdaq 2000-02
recoveryNeeded(84); // 525.00% — Bitcoin 2018
Percentage Points vs Percent: The Misuse That Skews News Headlines
When a news headline reports "unemployment rose 1%", the meaning is genuinely ambiguous — and journalists often pick the framing that makes the story sound more dramatic. If unemployment was 4% and it is now 5%, that is a 1 percentage point (pp) increase but a 25% relative increase (1 / 4 = 0.25). Both numbers are mathematically correct; they describe different things. The U.S. Federal Reserve, the Bureau of Labor Statistics, and serious financial press use the term "percentage points" or "basis points" precisely because of this gap.
A basis point (bp) is one-hundredth of a percentage point: 1 bp = 0.01 pp = 0.0001 in decimal. The Federal Reserve announces interest-rate decisions in basis points — a "25 basis point hike" raises the federal funds rate target by 0.25 percentage points. When the Fed raised rates from 4.50% to 4.75% in February 2023, that was 25 bp or 0.25 pp absolute — but it was a 5.6% relative increase (0.25 / 4.50). News reports calling it a "5.6% rate hike" would be technically computing relative change but would mislead readers used to thinking in absolute rate moves.
The confusion costs money in financial products. A credit card offering "0% intro APR for 12 months, then variable APR currently 24.99%" is 24.99 pp higher in absolute terms. A homeowner who saw their mortgage rate offer change from 6.50% to 6.75% experienced a 0.25 pp / 25 bp increase, but a 3.85% relative increase in their interest cost. Both framings are used by mortgage brokers depending on whether they are trying to soothe or alarm the borrower. Reading both numbers — absolute change and relative change — protects you from rhetorical framing.
Polling and surveys hit the same trap. "Candidate A's lead grew from 47% to 51%" is a 4 pp absolute lead change, but Candidate A's vote share grew (51 − 47) / 47 = 8.5% relatively. Margin-of-error language complicates this further: a poll with ±3 pp margin of error means the true value could be anywhere in a 6 pp window, not a 6% relative window. Pew Research Center, Gallup, and other major pollsters explicitly use "percentage points" in methodology sections to avoid the ambiguity. When you see vague "percent" language in a headline, look for the underlying numbers and recompute. Educational content only — for statistical or economic analysis, consult a qualified analyst.
// Same change, two ways to express it
function ppChange(oldPct, newPct) { return newPct - oldPct; }
function relChange(oldPct, newPct) { return (newPct - oldPct) / oldPct * 100; }
// Unemployment 4% -> 5%
ppChange(4, 5); // 1.0 pp absolute
relChange(4, 5); // 25% relative — same data, different framing
// Fed funds rate 4.50% -> 4.75% (Feb 2023)
ppChange(4.50, 4.75); // 0.25 pp = 25 basis points
relChange(4.50, 4.75); // 5.56% relative increase
// Mortgage rate 6.50% -> 6.75%
ppChange(6.50, 6.75); // 0.25 pp / 25 bp
relChange(6.50, 6.75); // 3.85% — what your interest bill actually changes by
// Basis point converter
const bp = 25; // 25 basis points
const pp = bp / 100; // 0.25 percentage points
const decimal = bp / 10000; // 0.0025
Compounding Percentages: Why 10% + 10% Does Not Equal 20%
Stack two percentage changes and naive arithmetic fails: a 10% increase followed by a 10% decrease does not return to the start, and a 10% increase followed by another 10% increase is not 20%. The correct math is multiplicative: chained percentage changes compose by multiplying their (1 + r) factors, not by adding them. So 10% up then 10% down = 1.10 × 0.90 = 0.99, a net 1% loss. And 10% up twice = 1.10 × 1.10 = 1.21, a net 21% gain — that extra 1 point is the compounding effect that distinguishes simple from compound math.
The asymmetry compounds dramatically over time. A 50% gain followed by a 50% loss = 1.50 × 0.50 = 0.75, a net 25% loss. The same loss-then-gain (1.50 × 0.50 vs 0.50 × 1.50) gives the same answer because multiplication is commutative — but that does not save you. The arithmetic average of +50% and −50% is 0%, but the actual outcome is −25%. This gap between arithmetic mean and geometric mean is called "volatility drag" or "variance drag", and it is roughly equal to σ²/2 for small returns, where σ is the standard deviation. A fund averaging 8% with 20% standard deviation experiences roughly 6% compounded annual growth — the missing 2% is the variance drag.
Stacked discounts are a real-world version that consumers regularly miscount. "30% off, then take an extra 20% off at checkout" sounds like 50% off but is actually 1 − (0.70 × 0.80) = 1 − 0.56 = 44% off. Retailers know this and exploit the headline. Conversely, stacked taxes work the same way: a 7% sales tax plus a 5% local surtax computed on the post-state-tax amount yields 1.07 × 1.05 − 1 = 12.35%, not 12%. The Wall Street Journal and other financial press routinely flag these compounding errors when politicians or marketers use them carelessly.
Inflation does the same. CPI rose 2.0% in 2020, 4.7% in 2021, 8.0% in 2022, 4.1% in 2023, and roughly 2.9% in 2024 (BLS data). Naive sum: 21.7%. Compound reality: 1.020 × 1.047 × 1.080 × 1.041 × 1.029 − 1 = 23.6%. That 1.9 pp gap means a $1,000 price tag in 2019 actually needs $1,236 in 2024 to match — a number worth knowing if you are negotiating a multi-year contract or sizing retirement spending. The longer the chain, the wider the gap. For 30-year planning, the compounding adjustment is large enough to dwarf many "rule of thumb" simplifications. Educational only — consult a CPA or financial advisor for specific tax and inflation calculations.
// Stacking percentage changes — multiply (1 + r), don't add r
function chain(...rates) {
return rates.reduce((acc, r) => acc * (1 + r), 1) - 1;
}
chain(0.10, 0.10); // 0.21 — not 0.20
chain(0.10, -0.10); // -0.01 — not zero
chain(0.50, -0.50); // -0.25 — variance drag in action
chain(-0.30, -0.20); // -0.44 — stacked discounts
// US CPI 2020-2024 cumulative
chain(0.020, 0.047, 0.080, 0.041, 0.029); // 0.236 (23.6%)
// Naive sum would say 21.7% — off by 1.9 pp
// Variance drag approximation
function varianceDrag(stdev) { return stdev * stdev / 2; }
varianceDrag(0.20); // 0.02 — 2% drag from 20% volatility