> ## Documentation Index
> Fetch the complete documentation index at: https://docs.truemath.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Units and precision

> TrueMath carries units with values and converts compatible units automatically, and it maintains full precision across every step of a calculation.

Two properties of TrueMath's number handling matter across every calculation: values
carry their **units**, and they are kept at **full precision** from input to output.

## Units travel with values

A value is not just a number — it is a number with a unit. A home price is
`375000 USD`; a term is `30 yr`; a distance is `5.2 m`. Because the unit is part of the
value, TrueMath can:

* **Convert compatible units automatically.** Adding `1 m` and `10 cm` yields a length;
  you do not convert by hand.
* **Reject incompatible combinations.** Adding a length to a mass is an error rather
  than a silently wrong number.

TrueMath supports units across many dimensions — length, area, volume, mass, time,
angle, information, and currency — as well as compound units such as velocity and
cost-per-unit. For the full catalog and conversion behavior, see [Units](/math/units).

## Model quantities as unit-carrying values

Units are a correctness layer, not decoration — the same role types play in a programming language. They are most valuable when you model a domain so that every dimensional quantity carries its unit, rather than reducing it to a bare number that *assumes* one.

A term is `30 yr`, not a `30` that the rest of the domain has agreed to read as years. Carrying the unit is what lets TrueMath validate the value — a term supplied in inches is rejected, not silently used — and convert it without loss wherever it is needed. A bare number assumes its unit by convention, and that convention is invisible to both the engine and whoever supplies the value, so nothing catches a value entered in the wrong unit. The result is a confident, silently wrong answer of exactly the kind units exist to prevent.

The guidance follows: keep values in their units through the calculation, and reduce one to a bare number only at the point where a scalar number is genuinely required, with a single explicit conversion. Stripping a unit reflexively throws away the safety the engine was carrying for you — see [When to strip a unit](/math/functions/units#when-to-strip-a-unit).

## Full precision, no intermediate rounding

TrueMath carries values at full internal precision through every step of a
calculation — roughly 15–16 significant digits — and that full-precision result is
what every step computes with. An intermediate result is never rounded before it feeds
the next step; rounding is applied only when a value is displayed, according to the
[variable's](/concepts/variables) display format.

This matters in multi-step work. When a rounded value becomes the input to the next
equation, small approximations compound into a meaningfully wrong answer. By keeping
every intermediate value exact, TrueMath eliminates that drift — the difference is
invisible in a single calculation and decisive in a long one.

<Note>
  Display formatting changes how a value is *shown*, not how it is *computed*. The stored
  value remains at full precision and is what subsequent steps use. Even a format set to
  show a value's natural precision displays at most 10 decimal places — the full-precision
  value behind it is unchanged.
</Note>
