{
  "category": "Financial functions",
  "display_name": "DOLLARDE",
  "entry_kind": "built_in_function",
  "eval_api": {
    "method": "POST",
    "url": "https://handbook.dnacalc.com/api/eval"
  },
  "function_id": "FUNC.DOLLARDE",
  "implementation_state": {
    "answer_bank": {
      "excel_builds": [
        "20430"
      ],
      "larger_numeric": 0,
      "last_bit": 0,
      "matched": 4847,
      "other_mismatch": 0,
      "refused": 0,
      "rows": 4847,
      "unread": 0,
      "worst_ulp": 0
    },
    "detail": "Recorded: 4,847 in the answer bank and 6 workbook cells.",
    "dnacalc_commit": "9e1884369a678158dd82d3d74188daf986995e87",
    "in_catalogue": true,
    "state": "matches",
    "state_label": "Matches every recorded Excel answer",
    "summary": "Matches all 4,853 recorded answers",
    "workbook_corpus": {
      "cells": 6,
      "matched": 6
    }
  },
  "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/financial.rs#L322-L327",
        "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/ported/dollar_fraction_family.rs#L48-L54"
      ],
      "repository": "https://github.com/DnaCalc/DnaCalc",
      "shared_code": [
        "catalogue/financial::dollar_num",
        "ported/dollar_fraction_family::normalized_fraction_denominator",
        "ported/dollar_fraction_family::decimal_scale"
      ],
      "source": "https://github.com/DnaCalc/DnaCalc/blob/9e1884369a678158dd82d3d74188daf986995e87/crates/calc-func/src/catalogue/financial.rs#L322-L327",
      "state": "matches",
      "suite": null,
      "summary": "Matches all 4,853 recorded answers"
    }
  ],
  "json_url": "https://handbook.dnacalc.com/api/functions/FUNC.DOLLARDE.json",
  "name": "DOLLARDE",
  "notes": [],
  "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- **[DOLLARFR](FUNC.DOLLARFR.md)** — the exact inverse, and the only other member of this family.\n  `DOLLARFR(DOLLARDE(x, f), f)` should return `x` up to floating-point rounding, and the round trip\n  is a good self-test of the scaling rule.\n- **`DOLLAR`** — unrelated despite the name. `DOLLAR` formats a number as currency *text*;\n  `DOLLARDE` returns a number. They share four letters and nothing else.\n- **`TEXT`** — the general formatter, and the tool you actually want if the goal is to *display* a\n  price in fractional notation rather than to compute with one. Excel's `# ?/32` number formats\n  cover the display direction.\n- **`PRICE` / `PRICEDISC`** — the bond-pricing functions whose output is a decimal price per 100.\n  `DOLLARFR` is what turns their answer into a market quote; `DOLLARDE` turns a market quote into\n  something they can consume.\n\n\n",
    "how-to-implement": "\n### Numerical notes\n\n\nThe arithmetic is exact for the cases that matter, and the one interesting question is not\nrounding but *specification*.\n\n| `fraction` | digit-count rule | `ceil(log10)` rule |\n|---|---|---|\n| 16 | `scale = 100` | `scale = 100` |\n| 10 | `scale = 100` | `scale = 10` |\n| 100 | `scale = 1000` | `scale = 100` |\n\nFor `DOLLARDE(1.5, 10)` the first rule gives `1 + 0.5·100/10 = 6` and the second gives\n`1 + 0.5·10/10 = 1.5`. That is not a last-bit difference; it is a different function. Which one\nExcel implements is **not settled by this page**, and `DOLLARDE(1.5, 10)` is the cheapest probe in\nthis whole batch. Power-of-ten denominators are outside market convention, which is presumably why\nthe ambiguity has survived.\n\n",
    "quirks": "\n### Result and edge cases\n\n\nReturns `Number`.\n\n- **The digit-width rule above is the edge case that bites.** A quote whose fractional field is\n  narrower than the denominator's digit count is a different price, not a formatting variant.\n- **Fractional field larger than the denominator** is accepted and rolls over into the whole part.\n- **`fraction` is truncated, not rounded**, so `15.99` reads as `15`, not as `16`. Truncation is\n  toward zero.\n- **A blank denominator** therefore reaches the kernel as `0` and produces `#DIV/0!` rather than a\n  missing-argument diagnosis.\n- Array arguments: `DOLLARDE` is declared as lifting natively over arrays, while its inverse\n  `DOLLARFR` is declared with an explicit broadcast over both argument positions. See\n  [DOLLARFR](FUNC.DOLLARFR.md) — the asymmetry between two functions that are inverses of each\n  other is itself a finding.\n\n\n\n### Errors\n\n\nAs documented on Microsoft's `DOLLARDE` page:\n\n| Error | Condition |\n|---|---|\n| `#NUM!` | `fraction < 0` |\n| `#DIV/0!` | `fraction ≥ 0` and `fraction < 1` |\n\n",
    "sources": "- Microsoft, \"DOLLARDE function\" —\n  <https://support.microsoft.com/en-us/office/dollarde-function-db85aab0-1677-428a-9dfd-a38476693427>\n  (syntax, both argument descriptions, the truncation remark, and the `#NUM!` and `#DIV/0!`\n  conditions, quoted above in the form the page states them).\n- Handbook, [Coercion and lifting](../model/02-coercion-and-lifting.md) — the general to-number\n  rule this family departs from, and the Missing/Empty distinction.\n- Handbook, [The value universe](../model/01-value-universe.md).\n- Handbook projections `data/functions/FUNC.DOLLARDE.json` and `data/presence/FUNC.DOLLARDE.json`\n  (arity, classification axes, implementing module, sibling, and the `BUG-FUNC-028` defect stream).\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,406 |\n| 20430 | Windows, 64-bit, CPU not recorded | 1,235 |\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.DOLLARDE.json).",
    "what-it-does": "\n`DOLLARDE(fractional_dollar, fraction)` converts a price written in **fractional notation** — the\nform US bond and note markets have quoted in for two centuries — into an ordinary decimal number.\n\nA quote of `1.02` in thirty-seconds is not \"one and two hundredths\". It is *one dollar and two\nthirty-seconds*, and the `.02` is a two-digit field holding the numerator. `DOLLARDE(1.02, 32)`\nis therefore `1 + 2/32 = 1.0625`.\n\nThe transformation is:\n\n    whole      = trunc(fractional_dollar)\n    frac_field = fractional_dollar − whole\n    result     = whole + frac_field × scale / fraction\n\nwhere `fraction` is the denominator (truncated to an integer) and `scale` is the power of ten that\nshifts the digit field up to a whole numerator. **The value of `scale` is determined by how many\ndecimal digits the denominator has**, and that is the whole subtlety of the function:\n\n| `fraction` | Digits | `scale` | `DOLLARDE(1.02, fraction)` |\n|---|---|---|---|\n| 8 | 1 | 10 | `1 + 0.2/8 = 1.025` |\n| 16 | 2 | 100 | `1 + 2/16 = 1.125` |\n| 32 | 2 | 100 | `1 + 2/32 = 1.0625` |\n\nSo the number of digits you write after the point is not free notation — it must match the width\nthe denominator implies. `DOLLARDE(1.2, 32)` is `1 + 20/32`, not `1 + 2/32`, because the field is\ntwo digits wide and `.2` means `20`. This is the single most common misreading of the function, and\nit produces a plausible wrong answer rather than an error.\n\nRange: for a well-formed quote the fractional field is in `[0, fraction)` and the result lies\nbetween `whole` and `whole + 1`. Nothing enforces that. `DOLLARDE(1.99, 32)` computes\n`1 + 99/32 ≈ 4.094` without complaint: the \"fraction\" was larger than the denominator, and the\nfunction has no notion of a malformed quote.\n\nNegative inputs work by symmetry, because both the truncation and the subtraction are toward zero:\n`DOLLARDE(−1.02, 32) = −1.0625`.\n\n\n\n### Arguments\n\n\n| Argument | Meaning | Default |\n|---|---|---|\n| `fractional_dollar` | A number expressed as an integer part and a fraction part, separated by a decimal symbol. Required. | — |\n| `fraction` | The integer to use in the denominator of the fraction. Required. | — |\n\nMicrosoft documents that **if `fraction` is not an integer, it is truncated**. In practice this\nmeans `DOLLARDE(1.02, 16.9)` is read as sixteenths.\n\n`fraction` is not restricted to powers of two by anything in the function, even though halves,\nquarters, eighths, sixteenths, thirty-seconds and sixty-fourths are the only denominators the\nmarket convention uses. A denominator of 3 or 7 is accepted and produces arithmetic that is\ninternally consistent but does not correspond to any quotation.\n\nBoth slots are numeric and go through this family's own coercion, which is narrower than the\ngeneral rule — see *Result and edge cases*.\n\n\n"
  },
  "signature": {
    "display": "DOLLARDE(fractional_dollar, fraction)",
    "parameters": [
      {
        "description": null,
        "name": "fractional_dollar",
        "optional": false,
        "repeats": false
      },
      {
        "description": null,
        "name": "fraction",
        "optional": false,
        "repeats": false
      }
    ],
    "trailing_repeats": false
  },
  "sources": {
    "metadata": {
      "admission": {
        "label": "implemented",
        "reason": null
      },
      "arity": {
        "max": 2,
        "min": 2
      },
      "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": "RefOnly",
        "thread_safety_class": "SafePure",
        "volatility_class": "NonVolatile"
      },
      "descriptions": {
        "long": null,
        "short": "A price quoted as a fraction (such as 1.02 for 1 2/16) as a decimal number",
        "short_source": "dna-calc-own"
      },
      "docs": {
        "english_description": "Converts a dollar price, expressed as a fraction, into a dollar price, expressed as a decimal number",
        "microsoft_url": "https://support.microsoft.com/en-us/office/dollarde-function-db85aab0-1677-428a-9dfd-a38476693427"
      },
      "entry_kind": "built_in_function",
      "localized_family_names": null,
      "localized_names": [
        {
          "locale": "ar-SA",
          "name": "DOLLARDE"
        },
        {
          "locale": "bg-BG",
          "name": "DOLLARDE"
        },
        {
          "locale": "cs-CZ",
          "name": "DOLLARDE"
        },
        {
          "locale": "da-DK",
          "name": "KR.DECIMAL"
        },
        {
          "locale": "de-DE",
          "name": "DOLLARDE"
        },
        {
          "locale": "el-GR",
          "name": "DOLLARDE"
        },
        {
          "locale": "en-AU",
          "name": "DOLLARDE"
        },
        {
          "locale": "en-GB",
          "name": "DOLLARDE"
        },
        {
          "locale": "en-US",
          "name": "DOLLARDE"
        },
        {
          "locale": "es-ES",
          "name": "MONEDA.DEC"
        },
        {
          "locale": "et-EE",
          "name": "DOLLARDE"
        },
        {
          "locale": "fi-FI",
          "name": "VALUUTTA.DES"
        },
        {
          "locale": "fr-FR",
          "name": "PRIX.DEC*"
        },
        {
          "locale": "he-IL",
          "name": "DOLLARDE"
        },
        {
          "locale": "hr-HR",
          "name": "DOLLARDE"
        },
        {
          "locale": "hu-HU",
          "name": "FORINT.DEC"
        },
        {
          "locale": "id-ID",
          "name": "DOLLARDE"
        },
        {
          "locale": "it-IT",
          "name": "DOLLARDE"
        },
        {
          "locale": "ja-JP",
          "name": "DOLLARDE"
        },
        {
          "locale": "ko-KR",
          "name": "DOLLARDE"
        },
        {
          "locale": "lt-LT",
          "name": "DOLLARDE"
        },
        {
          "locale": "lv-LV",
          "name": "DOLLARDE"
        },
        {
          "locale": "nb-NO",
          "name": "DOLLARDE"
        },
        {
          "locale": "nl-NL",
          "name": "DOLLAR.DE"
        },
        {
          "locale": "pl-PL",
          "name": "CENA.DZIES"
        },
        {
          "locale": "pt-BR",
          "name": "DOLLARDE"
        },
        {
          "locale": "pt-PT",
          "name": "MOEDADEC"
        },
        {
          "locale": "ro-RO",
          "name": "DOLLARDE"
        },
        {
          "locale": "ru-RU",
          "name": "РУБЛЬ.ДЕС"
        },
        {
          "locale": "sk-SK",
          "name": "DOLLARDE"
        },
        {
          "locale": "sl-SI",
          "name": "DOLLARDE"
        },
        {
          "locale": "sr-Latn-RS",
          "name": "DOLLARDE"
        },
        {
          "locale": "sv-SE",
          "name": "DECTAL"
        },
        {
          "locale": "th-TH",
          "name": "DOLLARDE"
        },
        {
          "locale": "tr-TR",
          "name": "LİRAON işlevi"
        },
        {
          "locale": "uk-UA",
          "name": "DOLLARDE"
        },
        {
          "locale": "vi-VN",
          "name": "DOLLARDE"
        },
        {
          "locale": "zh-CN",
          "name": "DOLLARDE"
        },
        {
          "locale": "zh-HK",
          "name": "DOLLARDE"
        },
        {
          "locale": "zh-TW",
          "name": "DOLLARDE"
        }
      ],
      "signature": {
        "display": "DOLLARDE(fractional_dollar, fraction)",
        "parameters": [
          {
            "description": null,
            "name": "fractional_dollar",
            "optional": false,
            "repeats": false
          },
          {
            "description": null,
            "name": "fraction",
            "optional": false,
            "repeats": false
          }
        ],
        "trailing_repeats": false
      },
      "surface_name": "DOLLARDE",
      "version_marker": null,
      "xlcall": {
        "code": "443",
        "symbol": "xlfDollarde"
      }
    },
    "microsoft": "https://support.microsoft.com/en-us/office/dollarde-function-db85aab0-1677-428a-9dfd-a38476693427"
  },
  "try_it": {
    "formula": "=DOLLARDE(1.02, 32)"
  },
  "url": "https://handbook.dnacalc.com/functions/DOLLARDE.html",
  "variants": [],
  "versions": [
    {
      "behaviour": "2,406 captured inputs are indexed for this environment. Capture dates: 2026-09-24 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.DOLLARDE.json"
      ]
    },
    {
      "behaviour": "1,235 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.DOLLARDE.json"
      ]
    }
  ]
}