class ReeNumber::RoundHelper

def absolute_precision(number, significant, precision)

def absolute_precision(number, significant, precision)
  if significant && precision > 0
    precision - digit_count(convert_to_decimal(number, precision))
  else
    precision
  end
end

def call(number, **opts)

def call(number, **opts)
  options = DEFAULTS.merge(opts)
  absolute_precision = absolute_precision(
    number, options[:significant], options[:precision]
  )
  rounded_number = convert_to_decimal(number, options[:precision]).round(absolute_precision, options[:round_mode])
  rounded_number = rounded_number.zero? ? rounded_number.abs : rounded_number
end

def convert_to_decimal(number, precision)

def convert_to_decimal(number, precision)
  case number
  when Float, String, Integer
    BigDecimal(number.to_s)
  when Rational
    BigDecimal(number, digit_count(number.to_i) + precision)
  else
    number.to_d
  end
end