Percentages, Profit and Loss, Discount and Interest
Percentages sit under half the quantitative questions in any placement test: profit and loss, discount, simple and compound interest, population change, successive changes. If you master a handful of identities and the habit of choosing a convenient base (usually 100), most of these take under 40 seconds. Every worked answer below is checked by computation.
1. Percentage basics
of is . Percentage change . The base is always the original quantity, which is where most mistakes happen.
Useful equivalents: , , , , , , , , , , .
The asymmetry of increase and decrease. If a quantity rises by , to return to the original it must fall by . If it falls by , it must rise by .
def fall_needed(rise):
return 100 * rise / (100 + rise)
def rise_needed(fall):
return 100 * fall / (100 - fall)
assert abs(fall_needed(25) - 20) < 1e-12 # +25 % then -20 % returns to the start
assert abs(rise_needed(20) - 25) < 1e-12
assert abs(rise_needed(50) - 100) < 1e-12 # halving needs a 100 % rise to restore
assert round(100 * 1.25 * 0.8, 6) == 100
Successive percentage changes
Two successive changes of and equal one net change of (use signs: a decrease is negative).
Example 1. A price rises 20% and then falls 20%. Net change? . A 4% loss.
Example 2. Price up 10%, then up 20%, then down 25%. Multiply factors: , a 1% decrease.
def net_change(*changes):
factor = 1.0
for c in changes:
factor *= 1 + c / 100
return (factor - 1) * 100
assert abs(net_change(20, -20) + 4) < 1e-9
assert abs(net_change(10, 20, -25) + 1) < 1e-9
assert abs(net_change(20, 20) - 44) < 1e-9 # two 20 % rises are a 44 % rise, not 40 %
Percentage with population, depreciation and "A is x% more than B"
- If A is more than B, then B is less than A.
- Population growing at for years: . Depreciation: .
Example 3. A town's population is 50,000 and grows 10% per year. Population after 2 years? .
Example 4. A machine bought for Rs 80,000 depreciates 15% a year. Value after 2 years? .
assert round(50000 * 1.1 ** 2) == 60500
assert round(80000 * 0.85 ** 2) == 57800
assert abs(fall_needed(40) - 28.571428) < 1e-5 # if A is 40 % more than B, B is 28.57 % less than A
Election and exam style percentages
Example 5. In an election between two candidates, the winner gets 55% of the votes and wins by 2,400 votes. Total votes? Margin = of the total, so total .
Example 6. In an exam, 70% pass in maths and 80% in English; 10% fail both. Percentage passing both? Pass at least one . Both .
assert 2400 / ((55 - 45) / 100) == 24000
assert 70 + 80 - (100 - 10) == 60
2. Profit, loss and discount
Definitions. Cost price (CP), selling price (SP), marked price (MP).
- Profit ; loss .
- Profit % ; loss % likewise. Always on cost price unless stated.
- Discount ; discount % . Always on marked price.
- for profit , and for discount .
Example 7. An article bought for Rs 800 is sold at a 25% profit. SP? .
Example 8. An article is marked at Rs 1,500 and sold for Rs 1,275. Discount %? Discount ; .
Example 9. A trader marks goods 40% above cost and allows a 25% discount. Profit or loss %? Take CP = 100: MP = 140; SP = . 5% profit.
Example 10. Marked price Rs 2,000, two successive discounts of 10% and 20%. Selling price? . Equivalent single discount .
assert 800 * 1.25 == 1000
assert (1500 - 1275) / 1500 * 100 == 15
assert round(100 * 1.40 * 0.75, 6) == 105
assert round(2000 * 0.9 * 0.8) == 1440 and abs(net_change(-10, -20) + 28) < 1e-9
Standard patterns
Same SP, one gain and one loss of . Always a loss of . Two articles sold at Rs 1,200 each, one at 20% gain and one at 20% loss. Overall? Loss .
cp1 = 1200 / 1.2
cp2 = 1200 / 0.8
total_cp, total_sp = cp1 + cp2, 2400
assert round((total_cp - total_sp) / total_cp * 100, 6) == 4.0 # an overall loss of 4 %
assert abs(((1000 + 1500) - 2400) / 2500 * 100 - 4.0) < 1e-9
Profit when SP = x times CP. If SP is 1.2 times CP the profit is 20%.
False weights. A shopkeeper sells at cost price but uses a 900 g weight for 1 kg. Gain .
assert round((1000 - 900) / 900 * 100, 2) == 11.11
Marking up to allow a discount and still profit . If CP = 100, desired SP ; MP . How much above cost should goods be marked so that after a 20% discount the profit is 20%? , so 50% above cost.
assert 120 * 100 / 80 == 150
Cost price from loss or gain. A man sells an article at a 15% loss. Had he sold it for Rs 240 more he would have gained 5%. CP? The difference between the two selling prices is of CP, so CP .
cp = 240 / 0.20
assert cp == 1200 and round(cp * 1.05 - cp * 0.85) == 240
Dishonest gain on mixed items and mark-up on SP
If profit is of the selling price, the cost is of the selling price. A 20% profit on SP means a markup on cost of .
assert 20 / (100 - 20) * 100 == 25
3. Simple interest
with in years and the rate per annum.
Example 11. SI on Rs 5,000 at 8% per annum for 3 years: .
Example 12. At what rate does a sum triple in 10 years at simple interest? Interest in 10 years: , so .
Example 13. A sum amounts to Rs 6,200 in 2 years and Rs 7,100 in 4 years at simple interest. Find the principal and rate. Interest for 2 years , so for 1 year . Principal . Rate .
assert 5000 * 8 * 3 / 100 == 1200
assert 100 * 2 / 10 == 20.0
principal = 6200 - 2 * (7100 - 6200) / 2
assert principal == 5300 and round(450 / 5300 * 100, 2) == 8.49
4. Compound interest
For half-yearly compounding use rate and periods; for quarterly, and .
Example 14. CI on Rs 10,000 at 10% per annum for 2 years: . (SI would be 2,000: the extra 100 is interest on the first year's interest.)
Example 15. Rs 8,000 at 10% per annum compounded half-yearly for 1 year. . CI .
def compound(p, rate, years, per_year=1):
return p * (1 + rate / 100 / per_year) ** (years * per_year)
assert round(compound(10000, 10, 2) - 10000) == 2100
assert round(compound(8000, 10, 1, per_year=2)) == 8820
assert round(compound(8000, 10, 1, per_year=2) - 8000) == 820
Difference between CI and SI
- For 2 years: .
- For 3 years: .
Example 16. The difference between CI and SI on a sum for 2 years at 5% is Rs 25. Find the sum. , so .
assert round(25 / (5 / 100) ** 2) == 10000
p, r = 10000, 5
ci2 = compound(p, r, 2) - p
si2 = p * r * 2 / 100
assert round(ci2 - si2, 6) == 25
ci3 = compound(p, r, 3) - p
assert round(ci3 - p * r * 3 / 100, 6) == round(p * (r / 100) ** 2 * (3 + r / 100), 6)
Doubling time (rule of 72, approximation). At compound interest, money doubles in about years.
import math
assert abs(math.log(2) / math.log(1.08) - 72 / 8) < 0.3 # 9.01 years exactly versus 9 by the rule of 72
Equal instalments. A loan repaid in equal annual instalments: each instalment satisfies for 2 years, where .
Example 17. Rs 5,500 is borrowed at 10% compounded annually and repaid in two equal annual instalments. Each instalment? , so and (to the paisa, 3,169.05).
x = 5500 / (1 / 1.1 + 1 / 1.1 ** 2)
assert round(x, 2) == 3169.05
assert round(x / 1.1 + x / 1.21, 6) == 5500
5. Quick percentage patterns
- Price and consumption: if a price rises , to keep expenditure the same consumption must fall .
- Salary: expenses as a fraction of income; savings income expenses.
- Area of a rectangle when length rises and breadth : net change . If the sides both increase 10%, the area rises 21%.
- A number reduced by gives ; a number increased then decreased by the same percent always ends below the start.
Example 18. The price of sugar rises 25%. By what percent should a family reduce consumption to keep spending unchanged? .
Example 19. A rectangle's length rises 20% and its breadth falls 10%. Change in area? increase.
assert fall_needed(25) == 20
assert abs(net_change(20, -10) - 8) < 1e-9
assert abs(net_change(10, 10) - 21) < 1e-9
6. Common traps
- Choosing the wrong base: profit on CP, discount on MP, percentage change on the original.
- Adding successive percentages ().
- Using simple interest in a compound question, or forgetting to halve the rate and double the periods for half-yearly compounding.
- "A is 25% more than B" versus "B is 25% less than A": not equivalent.
- Rounding mid-way: keep fractions until the end.
- Mixing time units (months versus years) in interest questions.
7. Practice set with answers
- A number is first increased by 30% and then decreased by 30%. Net change?
- A shopkeeper marks goods 25% above cost and gives a 12% discount. Profit %?
- An article is sold at a 10% loss. Had it been sold for Rs 280 more, the gain would have been 8%. Find the cost price.
- Find CI on Rs 12,500 for 2 years at 8% per annum, compounded annually.
- A sum becomes Rs 7,260 in 2 years at 10% per annum compound interest. Find the sum.
- The price of rice rises by 20%. A family wants to keep the same expenditure. By what percent must it cut consumption?
- Rs 6,000 lent at simple interest for 3 years yields Rs 1,260. Find the rate.
- A sells to B at a 20% profit; B sells to C at a 25% profit. C pays Rs 1,500. What did A pay?
assert abs(net_change(30, -30) + 9) < 1e-9
assert abs(1.25 * 0.88 * 100 - 100 - 10) < 1e-9
assert round(280 / (0.08 + 0.10)) == 1556 # a difference of 18 % of CP is Rs 280 (nearest rupee)
assert round(compound(12500, 8, 2) - 12500) == 2080
assert round(7260 / 1.1 ** 2) == 6000
assert round(fall_needed(20), 2) == 16.67
assert 1260 * 100 / (6000 * 3) == 7.0
assert round(1500 / (1.2 * 1.25)) == 1000
Answers: 1) 9% decrease; 2) 10% profit; 3) about Rs 1,556 (the exact value is ); 4) Rs 2,080; 5) Rs 6,000; 6) ; 7) 7% per annum; 8) Rs 1,000.