Class: ActiveSupport::NumberHelper::NumberToRoundedConverter

Inherits:
NumberConverter show all
Defined in:
activesupport/lib/active_support/number_helper/number_to_rounded_converter.rb

Overview

:nodoc:

Constant Summary

Constants inherited from NumberConverter

ActiveSupport::NumberHelper::NumberConverter::DEFAULTS

Instance Attribute Summary

Attributes inherited from NumberConverter

#number, #opts

Instance Method Summary collapse

Methods inherited from NumberConverter

convert, #execute, #initialize

Constructor Details

This class inherits a constructor from ActiveSupport::NumberHelper::NumberConverter

Instance Method Details

#convertObject


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'activesupport/lib/active_support/number_helper/number_to_rounded_converter.rb', line 11

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