Sha256: 37bdc086a02b6203fc997541fd99dd2dd2e0dd122f1a6193852e89dd541ef6ed
Contents?: true
Size: 1.64 KB
Versions: 10
Compression:
Stored size: 1.64 KB
Contents
# frozen_string_literal: true require "active_support/number_helper/number_converter" module ActiveSupport module NumberHelper class NumberToRoundedConverter < NumberConverter # :nodoc: self.namespace = :precision self.validate_float = true def convert helper = RoundingHelper.new(options) rounded_number = helper.round(number) if precision = options[:precision] if options[:significant] && precision > 0 digits = helper.digit_count(rounded_number) precision -= digits precision = 0 if precision < 0 # don't let it be negative end formatted_string = if rounded_number.nan? || rounded_number.infinite? || rounded_number == rounded_number.to_i "%00.#{precision}f" % rounded_number else s = rounded_number.to_s("F") s << "0" * precision a, b = s.split(".", 2) a << "." a << b[0, precision] end else formatted_string = rounded_number end delimited_number = NumberToDelimitedConverter.convert(formatted_string, options) format_number(delimited_number) end private def strip_insignificant_zeros options[:strip_insignificant_zeros] end def format_number(number) if strip_insignificant_zeros escaped_separator = Regexp.escape(options[:separator]) number.sub(/(#{escaped_separator})(\d*[1-9])?0+\z/, '\1\2').sub(/#{escaped_separator}\z/, "") else number end end end end end
Version data entries
10 entries across 10 versions & 2 rubygems