The exact numeric tower
Real, Decimal, and Money are arbitrary-precision rationals, not floating point. A source literal parses to an exact rational with no f64 round-trip, so 0.1 + 0.2 == 0.3 holds — the equality that silently fails in most languages. A sum of decimal amounts is the exact sum; division is the field operation, not a truncation.
Money sits apart from the tower. There is no implicit Int → Money: a count is not a currency amount, and the type system refuses to treat one as the other. Money arises only through monetary arithmetic, whose result-side widening runs the other way — Money ▷ Decimal ▷ Real ▷ Int — so that multiplying a Money by a rate yields Money, and the unit is never lost in a coercion. Rounding, when a domain needs it, is explicit: round_half_even(x, 2) rounds to cents banker’s-style, and like every numeric operation it stays exact — a Decimal rounds to a Decimal, never by way of a binary float.