提交 f71265f7 编写于 作者: R Rafael Mendonça França

Merge pull request #15379 from xuanxu/rational_precision

Fix AS::NumberHelper results with rationals
......@@ -48,6 +48,7 @@ def test_number_with_precision
assert_equal "-111.235", number_with_precision(-111.2346)
assert_equal "111.00", number_with_precision(111, precision: 2)
assert_equal "0.00100", number_with_precision(0.001, precision: 5)
assert_equal "3.33", number_with_precision(Rational(10, 3), precision: 2)
end
def test_number_to_human_size
......
* Fixed precision error in NumberHelper when using Rationals.
before:
ActiveSupport::NumberHelper.number_to_rounded Rational(1000, 3), precision: 2
#=> "330.00"
after:
ActiveSupport::NumberHelper.number_to_rounded Rational(1000, 3), precision: 2
#=> "333.33"
See #15379.
*Juanjo Bazán*
* Removed deprecated `Numeric#ago` and friends
Replacements:
......
......@@ -12,11 +12,7 @@ def convert
when Float, String
@number = BigDecimal(number.to_s)
when Rational
if significant
@number = BigDecimal(number, digit_count(number.to_i) + precision)
else
@number = BigDecimal(number, precision)
end
@number = BigDecimal(number, digit_count(number.to_i) + precision)
else
@number = number.to_d
end
......
......@@ -134,6 +134,7 @@ def test_to_rounded
assert_equal("111.23460000000000000000", number_helper.number_to_rounded('111.2346', :precision => 20))
assert_equal("111.23460000000000000000", number_helper.number_to_rounded(BigDecimal(111.2346, Float::DIG), :precision => 20))
assert_equal("111.2346" + "0"*96, number_helper.number_to_rounded('111.2346', :precision => 100))
assert_equal("111.2346", number_helper.number_to_rounded(Rational(1112346, 10000), :precision => 4))
end
end
......@@ -174,6 +175,7 @@ def test_to_rounded_with_significant_digits
assert_equal "9775.0000000000000000", number_helper.number_to_rounded(BigDecimal(9775), :precision => 20, :significant => true )
assert_equal "9775.0000000000000000", number_helper.number_to_rounded("9775", :precision => 20, :significant => true )
assert_equal "9775." + "0"*96, number_helper.number_to_rounded("9775", :precision => 100, :significant => true )
assert_equal("97.7", number_helper.number_to_rounded(Rational(9772, 100), :precision => 3, :significant => true))
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册