{
  "category": "Statistical functions",
  "display_name": "PERCENTILE.EXC",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.PERCENTILE.EXC",
  "implementation_state": {
    "answer_bank": null,
    "detail": "Recorded: 5 workbook cells.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "matches",
    "state_label": "Matches every recorded Excel answer",
    "summary": "Matches all 5 recorded answers",
    "workbook_corpus": {
      "cells": 5,
      "matched": 5
    }
  },
  "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/statistics.rs#L304-L304"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/statistics::list",
        "catalogue/statistics::percentile",
        "ported/percentile_common::percentile_inc_kernel",
        "ported/percentile_common::percentile_exc_kernel",
        "ported/percentile_common::interpolate_sorted"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/statistics.rs#L304-L304",
      "state": "matches",
      "suite": null,
      "summary": "Matches all 5 recorded answers"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.PERCENTILE.EXC.json",
  "name": "PERCENTILE.EXC",
  "notes": [],
  "schema": "efh.function-reference/v1",
  "section_order": [
    "what-it-does",
    "try-it",
    "quirks",
    "how-to-implement",
    "version-differences",
    "alternatives"
  ],
  "sections": {
    "alternatives": "\n[PERCENTILE.INC](FUNC.PERCENTILE.INC.md) includes the endpoint convention. [QUARTILE.EXC](FUNC.QUARTILE.EXC.md) selects exclusive quarter positions; [PERCENTRANK.EXC](FUNC.PERCENTRANK.EXC.md) maps a value to a fractional standing.\n\n\n",
    "how-to-implement": "\n1. Collect and sort the admitted numeric observations, keeping duplicates. Reject an empty set.\n2. Form the one-based rank `h=k*(n+1)` in binary64. Reject it if `h<1` or `h>n`; no neighbouring values exist for extrapolation beyond those bounds.\n3. Set `j=floor(h)` and `u=ceil(h)`. An integral rank returns sorted observation `j` directly.\n4. Otherwise interpolate `lower+(h-j)*(upper-lower)` between observations `j` and `u`, after converting one-based positions to array indices.\n\nWith four observations and `k=0.25`, `h=1.25`, so the result is `10+0.25*(20-10)=12.5`. The inclusive convention uses `1+k*(n-1)=1.75` on the same data and consequently gives 17.5.\n\nThis is the current helper’s rank construction, with ordinary binary64 interpolation. Exact floating-point endpoint edges and last-bit agreement for arbitrary Excel data sets are not established by these worked examples. A different percentile convention cannot be repaired merely by changing output formatting.\n\n\n",
    "quirks": "\nAn empty numeric set gives `#NUM!`; nonnumeric `k` gives `#VALUE!`. Zero and one are excluded. In exact arithmetic, `n` observations support fractions from `1/(n+1)` through `n/(n+1)`; outside that interval the function does not extrapolate.\n\nReferenced text, logical values and blanks are not additional numeric observations. Zeros and repeated numbers do count, so deleting them changes the rank positions. The current helper with one observation accepts the middle position `k=0.5` and returns that observation; other fractions fall outside its one-position interval. These collection and indexing rules are separate from floating-point boundary rounding.\n\n\n",
    "sources": "\n- [Microsoft: PERCENTILE.EXC function](https://support.microsoft.com/en-us/excel/functions/percentile-exc-function), opened 6 November 2026; syntax, documented argument rules and errors.\n- [DnaCalc implementation](https://github.com/DnaCalc/DnaCalc/blob/da3ecc4fb19a3a5529708c311d0e8f05688ac165/crates/calc-func/src/ported/percentile_common.rs); implementation steps and the limits identified in the text.\n\n",
    "try-it": "\n`=PERCENTILE.EXC({10,20,30,40},0.25)` returns `12.5`: its one-based position is `5*0.25=1.25`, a quarter of the distance from ten to twenty.\n\nFor these four observations, `k=0.2` reaches the minimum ten and `k=0.8` the maximum forty. `k=0.1` is below the first supported position and gives `#NUM!`. Being strictly between zero and one is necessary but does not guarantee an interpolable position.\n\n\n",
    "version-differences": "\nNo same-input comparison between named Excel builds is recorded for this function here. The documented behaviour below is not a measurement of every Excel release.\n\n\n",
    "what-it-does": "\n`PERCENTILE.EXC(array,k)` returns the data value at fractional position k in sorted numeric observations. It uses the exclusive convention, whose positions are based on `n+1`; the endpoints zero and one are excluded.\n\n\n"
  },
  "signature": {
    "display": "PERCENTILE.EXC(array, k)",
    "parameters": [
      {
        "description": null,
        "name": "array",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "k",
        "optional": false,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 2,
        "min": 2
      },
      "category": "Statistical 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": "RefOnly",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "Value at a given percentile, with 0 and 1 excluded",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Returns the k-th percentile of values in a range, where k is in the range 0..1, exclusive",
        "microsoft_url": "https://support.microsoft.com/en-us/office/percentile-exc-function-bbaa7204-e9e1-4010-85bf-c31dc5dce4ba"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "bg-BG",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "cs-CZ",
          "name": "PERCENTIL.EXC"
        },
        {
          "locale": "da-DK",
          "name": "FRAKTIL.UDELAD"
        },
        {
          "locale": "de-DE",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "el-GR",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "en-AU",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "en-GB",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "en-US",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "es-ES",
          "name": "PERCENTIL.EXC"
        },
        {
          "locale": "et-EE",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "fi-FI",
          "name": "PROSENTTIPISTE.ULK"
        },
        {
          "locale": "fr-FR",
          "name": "CENTILE.EXCLURE*"
        },
        {
          "locale": "he-IL",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "hr-HR",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "hu-HU",
          "name": "PERCENTILIS.KIZÁR"
        },
        {
          "locale": "id-ID",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "it-IT",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "ja-JP",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "ko-KR",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "lt-LT",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "lv-LV",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "nb-NO",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "nl-NL",
          "name": "PERCENTIEL.EXC"
        },
        {
          "locale": "pl-PL",
          "name": "PERCENTYL.PRZEDZ.OTW"
        },
        {
          "locale": "pt-BR",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "pt-PT",
          "name": "PERCENTIL.EXC"
        },
        {
          "locale": "ro-RO",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "ru-RU",
          "name": "ПРОЦЕНТИЛЬ.ИСКЛ"
        },
        {
          "locale": "sk-SK",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "sl-SI",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "sv-SE",
          "name": "PERCENTIL.EXK"
        },
        {
          "locale": "th-TH",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "tr-TR",
          "name": "YÜZDEBİRLİK.HRC"
        },
        {
          "locale": "uk-UA",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "vi-VN",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "zh-CN",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "zh-HK",
          "name": "PERCENTILE.EXC"
        },
        {
          "locale": "zh-TW",
          "name": "PERCENTILE.EXC"
        }
      ],
      "signature": {
        "display": "PERCENTILE.EXC(array, k)",
        "parameters": [
          {
            "description": null,
            "name": "array",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "k",
            "optional": false,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "PERCENTILE.EXC",
      "version_marker": null,
      "xlcall": {
        "code": "501",
        "symbol": "xlfPercentile_exc"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/percentile-exc-function-bbaa7204-e9e1-4010-85bf-c31dc5dce4ba"
  },
  "try_it": {
    "formula": "=PERCENTILE.EXC({10,20,30,40},0.25)"
  },
  "url": "https://handbook.dnacalc.com/functions/PERCENTILE.EXC.html",
  "variants": [],
  "versions": []
}