aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/float/rounding.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activesupport/lib/active_support/core_ext/float/rounding.rb')
-rw-r--r--activesupport/lib/active_support/core_ext/float/rounding.rb22
1 files changed, 22 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/core_ext/float/rounding.rb b/activesupport/lib/active_support/core_ext/float/rounding.rb
new file mode 100644
index 0000000000..989b1f8f80
--- /dev/null
+++ b/activesupport/lib/active_support/core_ext/float/rounding.rb
@@ -0,0 +1,22 @@
+module ActiveSupport #:nodoc:
+ module CoreExtensions #:nodoc:
+ module Float #:nodoc:
+ module Rounding
+ def self.included(base) #:nodoc:
+ base.send(:alias_method, :round_without_precision, :round)
+ base.send(:alias_method, :round, :round_with_precision)
+ 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