[前][次][番号順一覧][スレッド一覧]

ruby-changes:20632

From: mrkn <ko1@a...>
Date: Wed, 27 Jul 2011 00:51:14 +0900 (JST)
Subject: [ruby-changes:20632] mrkn:r32680 (trunk): * ext/bigdecimal/lib/bigdecimal/util.rb (Rational#to_d):

mrkn	2011-07-27 00:49:47 +0900 (Wed, 27 Jul 2011)

  New Revision: 32680

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=32680

  Log:
    * ext/bigdecimal/lib/bigdecimal/util.rb (Rational#to_d):
      zero or negative precision is error.  fixes #5098.
      [ruby-dev:44210]
    * test/bigdecimal/test_bigdecimal_util.rb: add test for the above
      change.

  Modified files:
    trunk/ChangeLog
    trunk/ext/bigdecimal/lib/bigdecimal/util.rb
    trunk/test/bigdecimal/test_bigdecimal_util.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 32679)
+++ ChangeLog	(revision 32680)
@@ -1,3 +1,12 @@
+Wed Jul 27 00:50:00 2011  Kenta Murata  <mrkn@m...>
+
+	* ext/bigdecimal/lib/bigdecimal/util.rb (Rational#to_d):
+	  zero or negative precision is error.  fixes #5098.
+	  [ruby-dev:44210]
+
+	* test/bigdecimal/test_bigdecimal_util.rb: add test for the above
+	  change.
+
 Wed Jul 27 00:48:00 2011  Kenta Murata  <mrkn@m...>
 
 	* ext/bigdecimal/lib/bigdecimal/util.rb (Float#to_d): modified for
Index: ext/bigdecimal/lib/bigdecimal/util.rb
===================================================================
--- ext/bigdecimal/lib/bigdecimal/util.rb	(revision 32679)
+++ ext/bigdecimal/lib/bigdecimal/util.rb	(revision 32680)
@@ -95,11 +95,11 @@
   #   # => #<BigDecimal:1a52bd8,'0.3142857142 8571427937 0154144999 105E1',45(63)>
   #   r.to_d(3)
   #   # => #<BigDecimal:1a44d08,'0.314E1',18(36)>
-  def to_d(nFig=0)
-    num = self.numerator.to_s
-    if nFig<=0
-      nFig = BigDecimal.double_fig*2+1
+  def to_d(precision)
+    if precision <= 0
+      raise ArgumentError, "negative precision"
     end
-    BigDecimal.new(num).div(self.denominator,nFig)
+    num = self.numerator
+    BigDecimal(num).div(self.denominator, precision)
   end
 end
Index: test/bigdecimal/test_bigdecimal_util.rb
===================================================================
--- test/bigdecimal/test_bigdecimal_util.rb	(revision 32679)
+++ test/bigdecimal/test_bigdecimal_util.rb	(revision 32680)
@@ -25,4 +25,19 @@
     assert_in_delta(BigDecimal(0.5, 5), 0.5.to_d(digits), delta)
     assert_in_delta(BigDecimal(355.0/113.0, 5), (355.0/113.0).to_d(digits), delta)
   end
+
+  def test_Rational_to_d
+    digits = 100
+    delta = 1.0/10**(digits)
+    assert_in_delta(BigDecimal(1.quo(2), digits), 1.quo(2).to_d(digits), delta)
+    assert_in_delta(BigDecimal(355.quo(113), digits), 355.quo(113).to_d(digits), delta)
+  end
+
+  def test_Rational_to_d_with_zero_precision
+    assert_raise(ArgumentError) { 355.quo(113).to_d(0) }
+  end
+
+  def test_Rational_to_d_with_negative_precision
+    assert_raise(ArgumentError) { 355.quo(113).to_d(-42) }
+  end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]