aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/float/rounding.rb
blob: 062d4668383489d7eac9c301a1c2fdc03888ceb4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
module ActiveSupport #:nodoc:
  module CoreExtensions #:nodoc:
    module Float #:nodoc:
      module Rounding
        def self.included(base) #:nodoc:
          base.class_eval do
            alias_method :round_without_precision, :round
            alias_method :round, :round_with_precision
          end
        end

        # Rounds the float with the specified precision.
        #
        #   x = 1.337
        #   x.round    # => 1
        #   x.round(1) # => 1.3
        #   x.round(2) # => 1.34
        def round_with_precision(precision = nil)
          precision.nil? ? round_without_precision : (self * (10 ** precision)).round / (10 ** precision).to_f
        end
      end
    end
  end
end