mirror of
https://github.com/github/rails.git
synced 2026-01-30 08:48:06 -05:00
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
This commit is contained in:
5
activesupport/lib/active_support/core_ext/float.rb
Normal file
5
activesupport/lib/active_support/core_ext/float.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
require File.dirname(__FILE__) + '/float/rounding'
|
||||
|
||||
class Float #:nodoc:
|
||||
include ActiveSupport::CoreExtensions::Float::Rounding
|
||||
end
|
||||
22
activesupport/lib/active_support/core_ext/float/rounding.rb
Normal file
22
activesupport/lib/active_support/core_ext/float/rounding.rb
Normal file
@@ -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
|
||||
25
activesupport/test/core_ext/float_ext_test.rb
Normal file
25
activesupport/test/core_ext/float_ext_test.rb
Normal file
@@ -0,0 +1,25 @@
|
||||
require File.dirname(__FILE__) + '/../abstract_unit'
|
||||
|
||||
class FloatExtRoundingTests < Test::Unit::TestCase
|
||||
def test_round_for_positive_number
|
||||
assert_equal 1, 1.4.round
|
||||
assert_equal 2, 1.6.round
|
||||
assert_equal 2, 1.6.round(0)
|
||||
assert_equal 1.4, 1.4.round(1)
|
||||
assert_equal 1.4, 1.4.round(3)
|
||||
assert_equal 1.5, 1.45.round(1)
|
||||
assert_equal 1.45, 1.445.round(2)
|
||||
end
|
||||
|
||||
def test_round_for_negative_number
|
||||
assert_equal( -1, -1.4.round )
|
||||
assert_equal( -2, -1.6.round )
|
||||
assert_equal( -1.4, -1.4.round(1) )
|
||||
assert_equal( -1.5, -1.45.round(1) )
|
||||
end
|
||||
|
||||
def test_round_with_negative_precision
|
||||
assert_equal 123460.0, 123456.0.round(-1)
|
||||
assert_equal 123500.0, 123456.0.round(-2)
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user