{
  "category": "Financial functions",
  "display_name": "PRICEDISC",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.PRICEDISC",
  "implementation_state": {
    "answer_bank": {
      "excel_builds": [
        "20430"
      ],
      "larger_numeric": 0,
      "last_bit": 0,
      "matched": 2400,
      "other_mismatch": 0,
      "refused": 0,
      "rows": 2400,
      "unread": 0,
      "worst_ulp": 0
    },
    "detail": "Recorded: 2,400 in the answer bank and 46 workbook cells.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "matches",
    "state_label": "Matches every recorded Excel answer",
    "summary": "Matches all 2,446 recorded answers",
    "workbook_corpus": {
      "cells": 46,
      "matched": 46
    }
  },
  "implementations": [
    {
      "commit": "9e1884369a678158dd82d3d74188daf986995e87",
      "flavour": "excel-compatibility-candidate",
      "language": "Rust",
      "name": "CalcFunc",
      "own_code": [
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/bonds.rs#L203-L206",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/discount_bill_yearfrac_family.rs#L261-L284"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/bonds::basis",
        "catalogue/bonds::bill_out",
        "catalogue/financial::date_1900",
        "locale::days_from_civil",
        "locale::civil_from_days",
        "locale::excel_serial_from_ymd",
        "locale::ymd_from_excel_serial",
        "ported/day_count_common::days_in_month",
        "ported/day_count_common::us_30_360",
        "ported/day_count_common::real_days_in_year",
        "ported/day_count_common::excel_actual_actual_year",
        "ported/discount_bill_yearfrac_family::max_excel_serial",
        "ported/discount_bill_yearfrac_family::parse_basis",
        "ported/discount_bill_yearfrac_family::parse_date_serial",
        "ported/discount_bill_yearfrac_family::actual_days",
        "ported/discount_bill_yearfrac_family::days360_us",
        "ported/discount_bill_yearfrac_family::days360_eu",
        "ported/discount_bill_yearfrac_family::security_days_and_year",
        "ported/discount_bill_yearfrac_family::map_discount_bill_yearfrac_error_to_ws",
        "ported/excel_numeric::binary_with",
        "ported/excel_numeric::excel_x87_sub",
        "ported/excel_numeric::excel_x87_mul",
        "ported/excel_numeric::excel_x87_div",
        "ported/excel_numeric/x87::mul",
        "ported/excel_numeric/x87::sub",
        "ported/excel_numeric/x87::div"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/bonds.rs#L203-L206",
      "state": "matches",
      "suite": null,
      "summary": "Matches all 2,446 recorded answers"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.PRICEDISC.json",
  "name": "PRICEDISC",
  "notes": [
    {
      "basis": "2,400 of 2,400 rows for each function with stored precision-64 arithmetic. Plain binary64 matches 2,398 to 2,399 of the same rows, so few rows separate the two; keeping intermediates in 80-bit registers without stores loses 475 to 1,335.",
      "documentation": null,
      "evidence": [
        {
          "commit": "26bb1800d3b349e44d594bed5f8bb589b528ef10",
          "locator": "lines 435-466",
          "note": "recorded answers pinned",
          "path": "crates/calc-func/tests/f3_financial.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "f1774082865e3a5ab7dec27ead7aeebb73b078c2",
          "locator": "counts",
          "note": "stored-PC64 against other precisions",
          "path": "evidence/round23/security-1900-hard/summary.json",
          "repository": "DnaCalc-Research"
        },
        {
          "commit": "f1774082865e3a5ab7dec27ead7aeebb73b078c2",
          "locator": "recorded_completed_groups",
          "note": "18,040 of 18,040 outcomes",
          "path": "round23-result.json",
          "repository": "DnaCalc-Research"
        }
      ],
      "functions": [
        "FUNC.DISC",
        "FUNC.INTRATE",
        "FUNC.PRICEDISC",
        "FUNC.RECEIVED",
        "FUNC.TBILLYIELD"
      ],
      "inferred": null,
      "kind": "bit-matching-detail",
      "note_id": "FN-DISC-001",
      "open": [],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "DISC(37655, 38261, 94.87631295104353, 102.73579504052532, 3)",
          "correct": {
            "bits": "0x3fa79784b622b019",
            "display": "0.04607786868413672",
            "how": "Exact rational value of the same formula from the binary64 inputs, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x3fa79784b622b014",
            "display": "0.046077868684136686",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e262e000000000",
                "display": "37655",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e2aea000000000",
                "display": "38261",
                "kind": "number"
              }
            },
            {
              "name": "pr",
              "value": {
                "bits": "0x4057b81582ea72c4",
                "display": "94.87631295104353",
                "kind": "number"
              }
            },
            {
              "name": "redemption",
              "value": {
                "bits": "0x4059af174414e760",
                "display": "102.73579504052532",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x4008000000000000",
                "display": "3",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 1458, key DISC|0x40e262e000000000|0x40e2aea000000000|0x4057b81582ea72c4|0x4059af174414e760|0x4008000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/DISC.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "TBILLYIELD(47701, 47702, 2.279784366464575)",
          "correct": {
            "bits": "0x40ce237bcaff5178",
            "display": "15430.967132487087",
            "how": "Exact rational value of the same formula from the binary64 inputs, correctly rounded.",
            "kind": "number"
          },
          "excel": {
            "bits": "0x40ce237bcaff517a",
            "display": "15430.96713248709",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40e74aa000000000",
                "display": "47701",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40e74ac000000000",
                "display": "47702",
                "kind": "number"
              }
            },
            {
              "name": "pr",
              "value": {
                "bits": "0x40023cff95ff2def",
                "display": "2.279784366464575",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 413, key TBILLYIELD|0x40e74aa000000000|0x40e74ac000000000|0x40023cff95ff2def",
            "note": null,
            "path": "cache/oracle-20430/build-20430/TBILLYIELD.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        },
        {
          "call": "INTRATE(58548, 58599, 428532.13421818457, 6.805737049418593, 0)",
          "correct": null,
          "excel": {
            "bits": "0xc01cccaed31c9766",
            "display": "-7.199885653133469",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x40ec968000000000",
                "display": "58548",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x40ec9ce000000000",
                "display": "58599",
                "kind": "number"
              }
            },
            {
              "name": "investment",
              "value": {
                "bits": "0x411a27d089707de5",
                "display": "428532.13421818457",
                "kind": "number"
              }
            },
            {
              "name": "redemption",
              "value": {
                "bits": "0x401b39132211b6ad",
                "display": "6.805737049418593",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H",
          "source": {
            "commit": "4d5320dfdc385354469b4d506153357bb932ab08",
            "locator": "line 2326, key INTRATE|0x40ec968000000000|0x40ec9ce000000000|0x411a27d089707de5|0x401b39132211b6ad|0x0000000000000000",
            "note": null,
            "path": "cache/oracle-20430/build-20430/INTRATE.jsonl.gz",
            "repository": "CalcFunc-Evidence"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "With B the year basis and D the day count, Excel evaluates DISC = (1 - pr/red) * (B/D); INTRATE = ((red - inv)/inv) * (B/D); RECEIVED = inv / (1 - (disc*D)/B); PRICEDISC = red - ((disc*red)*D)/B; TBILLYIELD = ((100 - pr)/pr) * (360/D), each + - * / taken from the x87 unit at precision 64 and stored to binary64. Results can sit several units from the exact value: the DISC row below is 5 units below it.",
      "status": "measured",
      "title": "The discount-security functions run a fixed formula order on the x87 unit"
    },
    {
      "basis": "19 YEARFRAC readings around serial 60 and the 1904, 2000 and 2004 leap days, 35 readings with serial 0 on all five bases, and 3 readings each from five financial functions.",
      "documentation": null,
      "evidence": [
        {
          "commit": "c4c5dde7e2dcf735d2849835fc49769e2ab67ba7",
          "locator": null,
          "note": "the leap-day test as implemented",
          "path": "crates/calc-func/src/ported/day_count_common.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": "delivered_scalar_readings_follow_the_application_route",
          "note": "recorded answers pinned",
          "path": "apps/dna-onecalc/tests/acceptance.rs",
          "repository": "DnaCalc"
        },
        {
          "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
          "locator": null,
          "note": "87 recorded readings",
          "path": "crates/calc-func/tests/captures/fn4_questions/YEARFRAC.reading.json",
          "repository": "DnaCalc"
        }
      ],
      "functions": [
        "FUNC.ACCRINTM",
        "FUNC.DISC",
        "FUNC.INTRATE",
        "FUNC.PRICEDISC",
        "FUNC.RECEIVED",
        "FUNC.YEARFRAC"
      ],
      "inferred": null,
      "kind": "quirk",
      "note_id": "FN-YEARFRAC-001",
      "open": [
        "An argument left empty in the call, as in YEARFRAC(,5), has not been read."
      ],
      "recorded_on": "2026-11-04",
      "repros": [
        {
          "call": "YEARFRAC(59, 60, 1)",
          "correct": null,
          "excel": {
            "bits": "0x3f66719f3601671a",
            "display": "0.0027397260273972603",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "start_date",
              "value": {
                "bits": "0x404d800000000000",
                "display": "59",
                "kind": "number"
              }
            },
            {
              "name": "end_date",
              "value": {
                "bits": "0x404e000000000000",
                "display": "60",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-YEARFRAC-fictitious-leap-day-3",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/YEARFRAC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "YEARFRAC(1520, 1521, 1)",
          "correct": null,
          "excel": {
            "bits": "0x3f6661ec6a5122f9",
            "display": "0.00273224043715847",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "start_date",
              "value": {
                "bits": "0x4097c00000000000",
                "display": "1520",
                "kind": "number"
              }
            },
            {
              "name": "end_date",
              "value": {
                "bits": "0x4097c40000000000",
                "display": "1521",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-YEARFRAC-fictitious-leap-day-9",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/YEARFRAC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "YEARFRAC(0, 5, 0)",
          "correct": null,
          "excel": {
            "bits": "0x3f8c71c71c71c71c",
            "display": "0.013888888888888888",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "start_date",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "end_date",
              "value": {
                "bits": "0x4014000000000000",
                "display": "5",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-YEARFRAC-calendar-zero-11",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/YEARFRAC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "YEARFRAC(0, 60, 1)",
          "correct": null,
          "excel": {
            "bits": "0x3fc50a8542a150a8",
            "display": "0.1643835616438356",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "start_date",
              "value": {
                "bits": "0x0000000000000000",
                "display": "0",
                "kind": "number"
              }
            },
            {
              "name": "end_date",
              "value": {
                "bits": "0x404e000000000000",
                "display": "60",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-YEARFRAC-fictitious-leap-day-1",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/YEARFRAC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "DISC(59, 60, 99, 100, 1)",
          "correct": null,
          "excel": {
            "bits": "0x400d33333333333a",
            "display": "3.650000000000003",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x404d800000000000",
                "display": "59",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x404e000000000000",
                "display": "60",
                "kind": "number"
              }
            },
            {
              "name": "pr",
              "value": {
                "bits": "0x4058c00000000000",
                "display": "99",
                "kind": "number"
              }
            },
            {
              "name": "redemption",
              "value": {
                "bits": "0x4059000000000000",
                "display": "100",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-DISC-fictitious-leap-day-1",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/DISC.reading.json",
            "repository": "DnaCalc"
          }
        },
        {
          "call": "DISC(1520, 1521, 99, 100, 1)",
          "correct": null,
          "excel": {
            "bits": "0x400d47ae147ae14f",
            "display": "3.6600000000000033",
            "kind": "number"
          },
          "input_route": "cell-value2",
          "inputs": [
            {
              "name": "settlement",
              "value": {
                "bits": "0x4097c00000000000",
                "display": "1520",
                "kind": "number"
              }
            },
            {
              "name": "maturity",
              "value": {
                "bits": "0x4097c40000000000",
                "display": "1521",
                "kind": "number"
              }
            },
            {
              "name": "pr",
              "value": {
                "bits": "0x4058c00000000000",
                "display": "99",
                "kind": "number"
              }
            },
            {
              "name": "redemption",
              "value": {
                "bits": "0x4059000000000000",
                "display": "100",
                "kind": "number"
              }
            },
            {
              "name": "basis",
              "value": {
                "bits": "0x3ff0000000000000",
                "display": "1",
                "kind": "number"
              }
            }
          ],
          "recorded_in": "Excel 16.0.20527.20088, Windows, bitness and CPU not recorded in this reading file",
          "source": {
            "commit": "2d0eddcac86413014643af81d646581d54ba57bc",
            "locator": "fn7-DISC-fictitious-leap-day-2",
            "note": null,
            "path": "crates/calc-func/tests/captures/fn4_questions/DISC.reading.json",
            "repository": "DnaCalc"
          }
        }
      ],
      "schema": "efh.function-note/v1",
      "statement": "Excel's calendar holds a 29 February 1900, serial 60, that never existed. On basis 1 (actual/actual) it does not make 1900 a leap year: YEARFRAC(59,60,1) is 1/365, where the real 1904-02-29 gives YEARFRAC(1520,1521,1) = 1/366. Serial 0 is accepted as a date: YEARFRAC(0,5,0) is 5/360 and YEARFRAC(0,60,1) is 60/365. Reversed dates give the same answer as in order. ACCRINTM, DISC, INTRATE, PRICEDISC and RECEIVED take the same 365 and 366 on those dates: DISC(59,60,99,100,1) is about 3.65 and DISC(1520,1521,99,100,1) about 3.66.",
      "status": "measured",
      "title": "On basis 1 the fictitious 1900-02-29 is not a leap day, and YEARFRAC takes serial 0 as a date"
    }
  ],
  "schema": "efh.function-reference/v1",
  "section_order": [
    "what-it-does",
    "try-it",
    "quirks",
    "how-to-implement",
    "version-differences",
    "alternatives"
  ],
  "sections": {
    "alternatives": "\n### Relationships\n\n\n- **[DISC](FUNC.DISC.md)** — the inverse: given the price, recover the rate.\n  `DISC(s, m, PRICEDISC(s, m, d, r, b), r, b)` returns `d` up to floating-point rounding, for any\n  positive price. A negative price from `PRICEDISC` has no inverse, because `DISC` documents\n  `pr ≤ 0` as `#NUM!`.\n- **[RECEIVED](FUNC.RECEIVED.md)** — the same relation solved for the other end of the trade: price\n  known, redemption wanted. `PRICEDISC` multiplies by `(1 − d × T)` and `RECEIVED` divides by it.\n- **[INTRATE](FUNC.INTRATE.md)** — the same trade quoted on the investment. If the rate you hold is\n  an `INTRATE`-style rate, it is not a valid `discount` here. Convert it first with\n  `d = r / (1 + r × T)`.\n- **`TBILLPRICE`** — this function fixed to redemption 100 and Actual/360, with a one-year limit.\n- **[PRICEMAT](FUNC.PRICEMAT.md)** — the price of a security that does pay interest, all at\n  maturity. `PRICEDISC` models no interest at all.\n- **[YEARFRAC](FUNC.YEARFRAC.md)** — the year fraction on its own, and the quickest way to separate a\n  calendar question from a price question.\n\n\n",
    "how-to-implement": "\n### Numerical notes\n\n\nThe arithmetic is one subtraction, two multiplications and one division. Two things matter: how `T`\nis obtained, and the order of the operations.\n\n**Near-zero prices.** Where `d × T` is close to 1, the subtraction cancels: the result is small\nand its relative error is large, though its absolute error stays of the order of rounding at the\nsize of `redemption`.\n\n**The year length at basis 1.** Microsoft says only that `B` is the number of days in the year.\nReading `B` back from the 815 basis 1 rows gives one rule, and all 815 fit it to at least ten\nsignificant figures:\n\n- for a span of at most one year, if both dates are in one calendar year, `B` is that year's\n  length; otherwise `B` is 366 if a 29 February lies in the span and 365 if not;\n- for a span of more than one year, `B` is the average length of the calendar years from the\n  settlement year to the maturity year, both included.\n\nSo 31 May 2012 to 19 February 2013 is 264 days with `B = 365`, although 2012 is a leap year,\nbecause 29 February 2012 lies before the span. And 30 April 1923 to 12 June 1924 is 409 days with\n`B = 365.5`, the average of 365 and 366.\n\n**The 30/360 bases.** All rows at bases 0 and 4 fit the standard US and European 30/360 counts,\nwith the one 1900 date noted above. `PRICEMAT` is the family member that departs from the standard\nrule at basis 0; see [PRICEMAT](FUNC.PRICEMAT.md).\n\n\n",
    "quirks": "\n### Result and edge cases\n\n\nReturns `Number`, a price per 100 of face value, or an amount in the units of `redemption` when\n`redemption` is an amount.\n\n- **A negative price is an answer, not an error.** There is no check on the result. In the 2,400\n  rows behind the notes below (Excel 16.0 build 20430, Windows 64-bit, AMD Ryzen 7 4800H), 284\n  return a negative price and none returns an error. The documented conditions are on the inputs;\n  a long span at a high discount passes all of them. The sibling [RECEIVED](FUNC.RECEIVED.md) does\n  refuse the equivalent case, and the two functions differ here.\n- **`settlement ≥ maturity`** is documented as `#NUM!`, not a reversed reading.\n- **The fractional part of a date is dropped.** 195 of those rows carry a fractional date, and each\n  fits the integer day count.\n- **The 1900 calendar.** The rows include a settlement of serial 60, the fictitious 29 February\n  1900, and on basis 4 it counts as day 29 of February, not as 1 March. The basis 1 treatment of\n  the same date is the subject of the second note below.\n- Empty, missing and error arguments are expected to follow the shared call model; see\n  [The value universe](../model/01-value-universe.md). No reading records this for `PRICEDISC`.\n\n\n\n### Errors\n\n\nAs documented on Microsoft's `PRICEDISC` page:\n\n| Error | Condition |\n|---|---|\n| `#VALUE!` | `settlement` or `maturity` is not a valid date |\n| `#NUM!` | `discount ≤ 0` or `redemption ≤ 0` |\n| `#NUM!` | `basis < 0` or `basis > 4` |\n| `#NUM!` | `settlement ≥ maturity` |\n\nNone of these rows is measured. All 2,400 recorded rows return a number, so the table is what\nMicrosoft states and nothing more.\n\n",
    "sources": "- Microsoft, \"PRICEDISC function\" —\n  <https://support.microsoft.com/en-us/office/pricedisc-function-d06ad7c1-380e-4be7-9fd9-75e3079acfd3>\n  (syntax, argument meanings, the day-count basis table, the serial-date and truncation remarks,\n  the `#VALUE!` and `#NUM!` conditions and the worked example). The equation on that page is an\n  image and was not readable, so no formula here is sourced from it.\n- The function notes on this page, and the recorded Excel rows and readings their evidence lists\n  cite. The count of negative prices, the fractional-date count, the 1900 date at basis 4 and the\n  basis 1 year-length rule were read from those 2,400 rows for this page and go beyond the notes'\n  own text; they carry the same Excel build, platform and CPU.\n- Handbook, [The value universe](../model/01-value-universe.md) and\n  [Coercion and lifting](../model/02-coercion-and-lifting.md) — argument kinds, numeric coercion\n  and error propagation.\n- Handbook, [Claim language and honesty](../model/06-claim-language.md) — the scoping rules this\n  page's claims are written under.\n- Handbook projections `data/functions/FUNC.PRICEDISC.json` and\n  `data/presence/FUNC.PRICEDISC.json` (arity, classification axes, implementing module and sibling\n  set).\n\n",
    "version-differences": "The recorded environments below distinguish a reading from a same-input comparison. Counts describe captured inputs in each environment; overlapping captures and comparisons are not totals of unique worksheet calls.\n\n| Excel 16.0 build | Platform and CPU | Captured inputs |\n|---|---|---:|\n| 20430 | Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics | 2,400 |\n\nThe record contains no same-input comparison between these environments. Reading different inputs on different builds does not establish either a version change or cross-build agreement.\n\n[Recorded environments and comparison details](https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.PRICEDISC.json).",
    "what-it-does": "\n`PRICEDISC(settlement, maturity, discount, redemption, [basis])` returns the **price per 100 of\nface value** of a security sold at a discount: one that pays nothing until maturity, when it pays\n`redemption`.\n\nThe model is *simple bank discount*. With `T` the year fraction from settlement to maturity under\nthe chosen day-count `basis`, and `d` the discount rate:\n\n    price = redemption × (1 − d × T)\n\nWritten with `B` the number of days in the year implied by the basis and `DSM` the number of days\nfrom settlement to maturity, so that `T = DSM/B`:\n\n    PRICEDISC = redemption − discount × redemption × DSM / B\n\nMicrosoft's page prints its equation as an image that could not be read, and defines `B` and `DSM`\nin words. The expression above is the one the notes below record from Excel's own answers.\n\nThe discount is charged on the *redemption* value, not on the amount paid, and it is charged once.\nNothing compounds. That makes the price a straight line in time, falling from `redemption` at\n`T = 0` and reaching zero at `T = 1/d`. A 10% discount rate reaches zero at ten years.\n\nMicrosoft's example: settlement 16 February 2008, maturity 1 March 2008, discount 5.25%, redemption\n100, basis 2 (Actual/360). That is 14 days, and 2008 is a leap year, so\n\n    100 × (1 − 0.0525 × 14/360) = 99.795833…\n\nwhich Microsoft shows as $99.80.\n\n\n\n### Arguments\n\n\n| Argument | Meaning | Default |\n|---|---|---|\n| `settlement` | The date the buyer purchases the security, after its issue date. Required. | — |\n| `maturity` | The date the security expires. Required. | — |\n| `discount` | The security's discount rate, as a decimal fraction. Required. | — |\n| `redemption` | The redemption value per $100 of face value. Required. | — |\n| `basis` | The day-count basis. Optional. | 0 |\n\nThe documented basis values are the standard five, as on the [DISC](FUNC.DISC.md) page: `0` or\nomitted = US (NASD) 30/360, `1` = Actual/actual, `2` = Actual/360, `3` = Actual/365, `4` = European\n30/360. Dates and `basis` are documented as truncated to integers, and Microsoft advises entering\ndates with `DATE` rather than as text.\n\n`redemption` is documented as a per-100 quantity. The result is proportional to it, so passing an\namount returns the price of that amount; the function has no way to tell the two apart.\n\nNumeric coercion of the argument slots follows the shared call model; see\n[Coercion and lifting](../model/02-coercion-and-lifting.md).\n\n\n"
  },
  "signature": {
    "display": "PRICEDISC(settlement, maturity, discount, redemption, [basis])",
    "parameters": [
      {
        "description": null,
        "name": "settlement",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "maturity",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "discount",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "redemption",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "basis",
        "optional": true,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 5,
        "min": 4
      },
      "category": "Financial functions",
      "classification": {
        "arg_preparation_profile": "ValuesOnlyPreAdapter",
        "coercion_lift_profile": "Custom",
        "determinism_class": "Deterministic",
        "error_collapse_profile": "None",
        "fec_dependency_profile": "None",
        "host_interaction_class": "None",
        "kernel_signature_class": "Custom",
        "rich_value_usage": "RichBlind",
        "surface_fec_dependency_profile": "None",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "Price, per 100 of face value, of a security sold at a discount",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Returns the price per $100 face value of a discounted security",
        "microsoft_url": "https://support.microsoft.com/en-us/office/pricedisc-function-d06ad7c1-380e-4be7-9fd9-75e3079acfd3"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "PRICEDISC"
        },
        {
          "locale": "bg-BG",
          "name": "PRICEDISC"
        },
        {
          "locale": "cs-CZ",
          "name": "PRICEDISC"
        },
        {
          "locale": "da-DK",
          "name": "KURS.DISKONTO"
        },
        {
          "locale": "de-DE",
          "name": "PRICEDISC"
        },
        {
          "locale": "el-GR",
          "name": "PRICEDISC"
        },
        {
          "locale": "en-AU",
          "name": "PRICEDISC"
        },
        {
          "locale": "en-GB",
          "name": "PRICEDISC"
        },
        {
          "locale": "en-US",
          "name": "PRICEDISC"
        },
        {
          "locale": "es-ES",
          "name": "PRECIO.DESCUENTO"
        },
        {
          "locale": "et-EE",
          "name": "PRICEDISC"
        },
        {
          "locale": "fi-FI",
          "name": "HINTA.DISK"
        },
        {
          "locale": "fr-FR",
          "name": "VALEUR.ENCAISSEMENT*"
        },
        {
          "locale": "he-IL",
          "name": "PRICEDISC"
        },
        {
          "locale": "hr-HR",
          "name": "PRICEDISC"
        },
        {
          "locale": "hu-HU",
          "name": "ÁR.LESZÁM"
        },
        {
          "locale": "id-ID",
          "name": "PRICEDISC"
        },
        {
          "locale": "it-IT",
          "name": "PRICEDISC"
        },
        {
          "locale": "ja-JP",
          "name": "PRICEDISC"
        },
        {
          "locale": "ko-KR",
          "name": "PRICEDISC"
        },
        {
          "locale": "lt-LT",
          "name": "PRICEDISC"
        },
        {
          "locale": "lv-LV",
          "name": "PRICEDISC"
        },
        {
          "locale": "nb-NO",
          "name": "PRIS.DISKONTERT"
        },
        {
          "locale": "nl-NL",
          "name": "PRIJS.DISCONTO"
        },
        {
          "locale": "pl-PL",
          "name": "CENA.DYSK"
        },
        {
          "locale": "pt-BR",
          "name": "PRICEDISC"
        },
        {
          "locale": "pt-PT",
          "name": "PREÇODESC"
        },
        {
          "locale": "ro-RO",
          "name": "PRICEDISC"
        },
        {
          "locale": "ru-RU",
          "name": "ЦЕНАСКИДКА"
        },
        {
          "locale": "sk-SK",
          "name": "PRICEDISC"
        },
        {
          "locale": "sl-SI",
          "name": "PRICEDISC"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "PRICEDISC"
        },
        {
          "locale": "sv-SE",
          "name": "PRISDISK"
        },
        {
          "locale": "th-TH",
          "name": "PRICEDISC"
        },
        {
          "locale": "tr-TR",
          "name": "DEĞERİND işlevi"
        },
        {
          "locale": "uk-UA",
          "name": "PRICEDISC"
        },
        {
          "locale": "vi-VN",
          "name": "PRICEDISC"
        },
        {
          "locale": "zh-CN",
          "name": "PRICEDISC"
        },
        {
          "locale": "zh-HK",
          "name": "PRICEDISC"
        },
        {
          "locale": "zh-TW",
          "name": "PRICEDISC"
        }
      ],
      "signature": {
        "display": "PRICEDISC(settlement, maturity, discount, redemption, [basis])",
        "parameters": [
          {
            "description": null,
            "name": "settlement",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "maturity",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "discount",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "redemption",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "basis",
            "optional": true,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "PRICEDISC",
      "version_marker": null,
      "xlcall": {
        "code": "436",
        "symbol": "xlfPricedisc"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/pricedisc-function-d06ad7c1-380e-4be7-9fd9-75e3079acfd3"
  },
  "try_it": {
    "formula": "=PRICEDISC(DATE(2024,1,1),DATE(2024,7,1),0.05,100)"
  },
  "url": "https://handbook.dnacalc.com/functions/PRICEDISC.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "2,400 captured inputs are indexed for this environment. Capture dates: 2026-09-25 to 2026-09-25. This is a reading count, not a comparison with another build.",
      "excel_build": "16.0 build 20430",
      "platform": "Windows, 64-bit, AMD Ryzen 7 4800H with Radeon Graphics",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.PRICEDISC.json"
      ]
    }
  ]
}