{
  "category": "Math and trigonometry functions",
  "display_name": "CEILING",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.CEILING",
  "implementation_state": {
    "answer_bank": {
      "excel_builds": [
        "20430"
      ],
      "larger_numeric": 2,
      "last_bit": 0,
      "matched": 1323,
      "other_mismatch": 0,
      "refused": 10,
      "rows": 1335,
      "unread": 0,
      "worst_ulp": 4611686018427387904
    },
    "detail": "Of 1,672 recorded answers (1,335 in the answer bank and 337 workbook cells), 12 do not match: 2 differ by more than 16 ULP, 10 are refused.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "differs",
    "state_label": "Known larger differences",
    "summary": "Known larger differences on 12 of 1,672 recorded answers",
    "workbook_corpus": {
      "cells": 337,
      "matched": 337
    }
  },
  "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/rounding.rs#L112-L112",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/rounding.rs#L521-L529"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/rounding::call",
        "catalogue/rounding::numeric",
        "catalogue/rounding::numbers",
        "catalogue/rounding::ceiling_for",
        "catalogue/rounding::to_multiple",
        "catalogue/rounding::quotient",
        "decimal::truncate",
        "decimal::floor",
        "decimal::ceil",
        "ported/ceiling_floor_family::excel_quotient"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/rounding.rs#L112-L112",
      "state": "differs",
      "suite": null,
      "summary": "Known larger differences on 12 of 1,672 recorded answers"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.CEILING.json",
  "name": "CEILING",
  "notes": [],
  "schema": "efh.function-reference/v1",
  "section_order": [
    "what-it-does",
    "try-it",
    "quirks",
    "how-to-implement",
    "version-differences",
    "alternatives"
  ],
  "sections": {
    "alternatives": "\n[MROUND](FUNC.MROUND.md) chooses a nearest multiple; [ROUNDUP](FUNC.ROUNDUP.md) and [ROUNDDOWN](FUNC.ROUNDDOWN.md) address decimal positions. [FLOOR.MATH](FUNC.FLOOR.MATH.md) provides the other directional family.\n\n\n",
    "how-to-implement": "\nLet `D` mean one nearest/even binary64 rounding and `R` the [stored 64-bit-significand operation](../model/09-staged-arithmetic.md).\n\n1. Coerce the two arguments in order. Return positive zero if either is zero; reject a positive number with negative significance.\n2. The current native wrapper first obtains `R(number/significance)` to check the arithmetic site. A nonfinite quotient eventually gives `#NUM!`; a zero quotient keeps its zero route. For a finite nonzero quotient, the shared reading helper recomputes `q=D(number/significance)`.\n3. Round q to fifteen significant decimal digits, then convert that decimal reading back to nearest binary64. The source implements this as scientific formatting with one leading digit and fourteen fractional digits, followed by parsing.\n4. Take the mathematical ceiling of that stored reading and return `R(significance*count)`. Keep the count as a floating integer or a sufficiently large integer; narrowing every possible count to a signed 64-bit integer introduces an unrelated limit. Normalize zero; the current number publisher rejects nonfinite results and refuses unsupported subnormal publication.\n\nThe decimal-reading step can be coded without a formatter. Decode the exact q, find `e` with `10^e<=abs(q)<10^(e+1)`, and let `h=10^(e-14)`. Round `abs(q)/h` to the nearest integer, with an exact half choosing an even integer; restore sign, multiply by h exactly and store once to binary64. Use integer quotient/remainder comparisons as in the stored-arithmetic chapter. The Rust formatter’s nearest/even rule is documented publicly. This step acts on the binary64 quotient; ROUND’s preliminary input scaling is a different recipe.\n\nFor `number=-10.3,significance=3`, the quotient reading is about `-3.43333333333333`; its ceiling is `-3`, giving `-9`. A significance of `-3` makes the quotient positive, its ceiling four, and the product `-12`.\n\nThe reading is a measured reconstruction on retained controls, not a recovery of private source. Underflow, extreme counts and whole-domain agreement still need separately scoped evidence.\n\n\n",
    "quirks": "\nThe significance sign changes the negative-input direction; a positive number with negative significance gives `#NUM!`. The current wrapper returns zero if either operand is zero, before that sign guard. Nonnumeric arguments are documented as `#VALUE!`.\n\nNear an integer, the current function counts from a fifteen-significant-digit quotient reading. It can therefore return a multiple below the original positive input. The cited source retains `CEILING(1*(1+2^-48),1)=1`, while `CEILING(1*(1+2^-47),1)=2`. These are recorded boundary controls, separate from the ordinary signed examples above.\n\nDo not substitute ROUNDUP: CEILING chooses multiples, and its negative-input sign rule is different. Extreme quotient and result publication cases also belong to the scalar wrapper’s numerical policy.\n\n\n",
    "sources": "\n- [Microsoft: CEILING function](https://support.microsoft.com/en-us/excel/functions/ceiling-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/catalogue/rounding.rs); implementation steps and the limits identified in the text.\n- [Quotient reading and sign helpers](https://github.com/DnaCalc/DnaCalc/blob/da3ecc4fb19a3a5529708c311d0e8f05688ac165/crates/calc-func/src/ported/ceiling_floor_family.rs).\n- [Rust formatting precision and nearest/even rounding](https://doc.rust-lang.org/std/fmt/index.html#precision), opened 6 November 2026; semantics of the formatter used by the current quotient helper.\n\n",
    "try-it": "\n`=CEILING(-10.3,3)` returns `-9`, while `=CEILING(-10.3,-3)` returns `-12`. The magnitude quotient is about 3.4333: selecting three or four steps gives the two directions.\n\n`=CEILING(31.2,3)` returns `33`. A positive input with negative significance, such as `=CEILING(31.2,-3)`, gives `#NUM!` in the current route.\n\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, CPU not recorded | 1,335 |\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.CEILING.json).",
    "what-it-does": "\n`CEILING(number,significance)` chooses a multiple of a signed step. For positive inputs with positive significance it rounds outward. For negative inputs, positive significance moves toward zero and negative significance moves away from zero. Both arguments are required. Significance is a step size, such as three or `0.05`, rather than a count of decimal places.\n\n\n"
  },
  "signature": {
    "display": "CEILING(number, significance)",
    "parameters": [
      {
        "description": null,
        "name": "number",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "significance",
        "optional": false,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 2,
        "min": 2
      },
      "category": "Math and trigonometry 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": "Number rounded up, away from zero, to a multiple of the significance",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Rounds a number to the nearest integer or to the nearest multiple of significance",
        "microsoft_url": "https://support.microsoft.com/en-us/office/ceiling-function-0a5cd7c8-0720-4f0a-bd2c-c943e510899f"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "CEILING"
        },
        {
          "locale": "bg-BG",
          "name": "CEILING"
        },
        {
          "locale": "cs-CZ",
          "name": "ZAOKR.NAHORU"
        },
        {
          "locale": "da-DK",
          "name": "AFRUND.LOFT"
        },
        {
          "locale": "de-DE",
          "name": "CEILING"
        },
        {
          "locale": "el-GR",
          "name": "CEILING"
        },
        {
          "locale": "en-AU",
          "name": "CEILING"
        },
        {
          "locale": "en-GB",
          "name": "CEILING"
        },
        {
          "locale": "en-US",
          "name": "CEILING"
        },
        {
          "locale": "es-ES",
          "name": "MULTIPLO.SUPERIOR"
        },
        {
          "locale": "et-EE",
          "name": "CEILING"
        },
        {
          "locale": "fi-FI",
          "name": "PYÖRISTÄ.KERR.YLÖS"
        },
        {
          "locale": "fr-FR",
          "name": "PLAFOND*"
        },
        {
          "locale": "he-IL",
          "name": "CEILING"
        },
        {
          "locale": "hr-HR",
          "name": "CEILING"
        },
        {
          "locale": "hu-HU",
          "name": "PLAFON"
        },
        {
          "locale": "id-ID",
          "name": "CEILING"
        },
        {
          "locale": "it-IT",
          "name": "ARROTONDA.ECCESSO"
        },
        {
          "locale": "ja-JP",
          "name": "CEILING"
        },
        {
          "locale": "ko-KR",
          "name": "CEILING"
        },
        {
          "locale": "lt-LT",
          "name": "CEILING"
        },
        {
          "locale": "lv-LV",
          "name": "CEILING"
        },
        {
          "locale": "nb-NO",
          "name": "TAK"
        },
        {
          "locale": "nl-NL",
          "name": "CEILING"
        },
        {
          "locale": "pl-PL",
          "name": "ZAOKR.W.GÓRĘ"
        },
        {
          "locale": "pt-BR",
          "name": "TETO"
        },
        {
          "locale": "pt-PT",
          "name": "ARRED.EXCESSO"
        },
        {
          "locale": "ro-RO",
          "name": "CEILING"
        },
        {
          "locale": "ru-RU",
          "name": "CEILING"
        },
        {
          "locale": "sk-SK",
          "name": "CEILING"
        },
        {
          "locale": "sl-SI",
          "name": "CEILING"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "CEILING"
        },
        {
          "locale": "sv-SE",
          "name": "RUNDA.UPP"
        },
        {
          "locale": "th-TH",
          "name": "CEILING"
        },
        {
          "locale": "tr-TR",
          "name": "TAVANAYUVARLA işlevi"
        },
        {
          "locale": "uk-UA",
          "name": "CEILING"
        },
        {
          "locale": "vi-VN",
          "name": "CEILING"
        },
        {
          "locale": "zh-CN",
          "name": "CEILING"
        },
        {
          "locale": "zh-HK",
          "name": "CEILING"
        },
        {
          "locale": "zh-TW",
          "name": "CEILING"
        }
      ],
      "signature": {
        "display": "CEILING(number, significance)",
        "parameters": [
          {
            "description": null,
            "name": "number",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "significance",
            "optional": false,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "CEILING",
      "version_marker": null,
      "xlcall": {
        "code": "288",
        "symbol": "xlfCeiling"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/ceiling-function-0a5cd7c8-0720-4f0a-bd2c-c943e510899f"
  },
  "try_it": {
    "formula": "=CEILING(-10.3,3)"
  },
  "url": "https://handbook.dnacalc.com/functions/CEILING.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "1,335 captured inputs are indexed for this environment. Capture dates: 2026-09-29 to 2026-09-29. This is a reading count, not a comparison with another build.",
      "excel_build": "16.0 build 20430",
      "platform": "Windows, 64-bit, CPU not recorded",
      "sources": [
        "https://github.com/DnaCalc/ExcelFunctionsHandbook/blob/5dc75391aa5125ccc5abdb095da85950980d6fd8/content/evidence/environments/FUNC.CEILING.json"
      ]
    }
  ]
}