class ReeNumber::NumberToRounded
def call(number, **opts)
def call(number, **opts) options = DEFAULTS.merge(opts) rounded_number = round_helper( number, **slice( options, [:precision, :significant, :round_mode] ) ) if precision = options[:precision] if options[:significant] && precision > 0 digits = digit_count(rounded_number) precision -= digits precision = 0 if precision < 0 end formatted_string = if rounded_number.finite? s = rounded_number.to_s("F") a, b = s.to_s.split(".", 2) if precision != 0 b << "0" * precision a << "." a << b[0, precision] end a else "%f" % rounded_number end else formatted_string = rounded_number end delimited_number = number_to_delimited(formatted_string, **slice(options, [:separator, :delimiter])) options[:strip_insignificant_zeros] ? format_number(delimited_number) : delimited_number end
def format_number(number)
def format_number(number) escaped_separator = Regexp.escape(".") number.sub(/(#{escaped_separator})(\d*[1-9])?0+\z/, '\1\2').sub(/#{escaped_separator}\z/, "") end