module.exports = { slug: "present-value-of-lump-sum", title: "Present value of a lump sum", deck_category: "finance", description: "Computes the present value of a single future cash amount, discounted at a given annual rate.", inputs: [ { name: "future_value", type: "number", unit: "currency units", required: true, description: "Amount to be received in the future", min: 0 }, { name: "annual_discount_rate_percent", type: "number", unit: "%", required: true, description: "Annual discount rate", min: 0 }, { name: "years", type: "number", unit: "years", required: true, description: "Number of years until the amount is received", min: 0 } ], outputs: [ { name: "present_value", unit: "currency units", description: "Value of the future amount in today's terms" } ], steps: [ "Convert the annual rate to a decimal: r = annual_discount_rate_percent / 100.", "present_value = future_value / (1 + r) ^ years.", "Round present_value to 2 decimals (money to cents)." ], constants: [], sources: [ { kind: "edition_page", value: "Brealey, Myers, Allen, Principles of Corporate Finance, 13th ed., Chapter 2, section 2-1 (Present Values)", title: "Principles of Corporate Finance", publisher: "McGraw-Hill", retrieved_utc: "2026-09-30T19:31:29Z", note: "PV = FV / (1+r)^n" } ], disclaimer: null, questionText(inputs) { return `What is the present value of $${inputs.future_value} to be received in ${inputs.years} years, discounted at ${inputs.annual_discount_rate_percent}% per year?`; }, run(inputs) { const { future_value, annual_discount_rate_percent, years } = inputs; if (typeof future_value !== "number" || future_value < 0) throw new Error("future_value must be a non-negative number"); if (typeof annual_discount_rate_percent !== "number" || annual_discount_rate_percent < 0) throw new Error("annual_discount_rate_percent must be a non-negative number"); if (typeof years !== "number" || years < 0) throw new Error("years must be a non-negative number"); const r = annual_discount_rate_percent / 100; const present_value = Math.round((future_value / Math.pow(1 + r, years)) * 100) / 100; const fmt = (n) => n.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ","); return { answer: `$${fmt(present_value)}`, values: { present_value } }; }, examples: [ { name: "worked example", inputs: { future_value: 10000, annual_discount_rate_percent: 5, years: 10 }, expected: { answer: "$6,139.13" }, check: "hand computation: PV = 10000 / (1.05)^10 = 10000/1.628894... = 6139.1325..., rounds to 6139.13" }, { name: "test vector: short horizon", inputs: { future_value: 1000, annual_discount_rate_percent: 8, years: 1 }, expected: { answer: "$925.93" }, check: "hand computation: PV = 1000 / 1.08 = 925.9259..., rounds to 925.93" } ] };