aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib
diff options
context:
space:
mode:
authorMichael Koziarski <michael@koziarski.com>2007-09-02 23:54:08 +0000
committerMichael Koziarski <michael@koziarski.com>2007-09-02 23:54:08 +0000
commitf0dbd22c4647bf8e37fd9b58ce6652aaca27376e (patch)
treeac07cde2f7f9d84bd88e405cfc8a8c4520cbc37e /activesupport/lib
parent21837821a804f6c26a0672f9ce5697e198624968 (diff)
downloadrails-f0dbd22c4647bf8e37fd9b58ce6652aaca27376e.tar.gz
rails-f0dbd22c4647bf8e37fd9b58ce6652aaca27376e.tar.bz2
rails-f0dbd22c4647bf8e37fd9b58ce6652aaca27376e.zip
Allow Float#round to take a precision argument. Closes #8626 [norbert]
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7401 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/lib')
-rw-r--r--activesupport/lib/active_support/core_ext/float.rb5
-rw-r--r--activesupport/lib/active_support/core_ext/float/rounding.rb22
2 files changed, 27 insertions, 0 deletions
diff --git a/activesupport/lib/active_support/core_ext/float.rb b/activesupport/lib/active_support/core_ext/float.rb
new file mode 100644
index 0000000000..ac5d5a47e6
--- /dev/null
+++ b/activesupport/lib/active_support/core_ext/float.rb
@@ -0,0 +1,5 @@
+require File.dirname(__FILE__) + '/float/rounding'
+
+class Float #:nodoc:
+ include ActiveSupport::CoreExtensions::Float::Rounding
+end
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