Class: Plurimath::Formatter::Numbers::PrecisionResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/plurimath/formatter/numbers/precision_resolver.rb

Overview

Chooses which precision source wins for one render call.

Instance Method Summary collapse

Instance Method Details

#resolve(source, precision:, base:, significant:, notation_supported:, digit_count: 0) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/plurimath/formatter/numbers/precision_resolver.rb', line 8

def resolve(source, precision:, base:, significant:,
notation_supported:, digit_count: 0)
  return precision if precision

  significant_precision = significant_base_precision(source, base,
                                                     significant)
  return significant_precision if significant_precision

  # Source owns input-derived digit lengths; this resolver only decides
  # which precision rule wins. Plain decimal rendering preserves
  # fractional scale, while notation precision controls coefficient
  # digits after the leading digit.
  if notation_supported
    # A requested digit budget (significant or digit_count) widens the
    # coefficient fraction beyond the source's own significant digits
    # (one digit leads, so the fraction allowance is budget - 1).
    budget = [significant, digit_count].max
    if budget.positive?
      return [budget - 1,
              source.notation_precision].max
    end

    return source.notation_precision
  end

  source.decimal_precision
end