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

ruby-changes:20631

From: mrkn <ko1@a...>
Date: Wed, 27 Jul 2011 00:48:36 +0900 (JST)
Subject: [ruby-changes:20631] mrkn:r32679 (trunk): * ext/bigdecimal/lib/bigdecimal/util.rb (Float#to_d): modified for

mrkn	2011-07-27 00:48:25 +0900 (Wed, 27 Jul 2011)

  New Revision: 32679

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

  Log:
    * ext/bigdecimal/lib/bigdecimal/util.rb (Float#to_d): modified for
      specifying precision.  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 32678)
+++ ChangeLog	(revision 32679)
@@ -1,3 +1,11 @@
+Wed Jul 27 00:48:00 2011  Kenta Murata  <mrkn@m...>
+
+	* ext/bigdecimal/lib/bigdecimal/util.rb (Float#to_d): modified for
+	  specifying precision.  fixes #5098.  [ruby-dev:44210]
+
+	* test/bigdecimal/test_bigdecimal_util.rb: add test for the above
+	  change.
+
 Wed Jul 27 00:45:00 2011  Kenta Murata  <mrkn@m...>
 
 	* ext/bigdecimal/lib/bigdecimal/util.rb (Integer#to_d): added
Index: ext/bigdecimal/lib/bigdecimal/util.rb
===================================================================
--- ext/bigdecimal/lib/bigdecimal/util.rb	(revision 32678)
+++ ext/bigdecimal/lib/bigdecimal/util.rb	(revision 32679)
@@ -27,8 +27,8 @@
   #     0.5.to_d
   #     # => #<BigDecimal:1dc69e0,'0.5E0',9(18)>
   #
-  def to_d
-    BigDecimal(self.to_s)
+  def to_d(precision=nil)
+    BigDecimal(self, precision || Float::DIG+1)
   end
 end
 
Index: test/bigdecimal/test_bigdecimal_util.rb
===================================================================
--- test/bigdecimal/test_bigdecimal_util.rb	(revision 32678)
+++ test/bigdecimal/test_bigdecimal_util.rb	(revision 32679)
@@ -12,4 +12,17 @@
     assert_equal(BigDecimal(1), 1.to_d)
     assert_equal(BigDecimal(2<<100), (2<<100).to_d)
   end
+
+  def test_Float_to_d_without_precision
+    delta = 1.0/10**(Float::DIG + 1)
+    assert_in_delta(BigDecimal(0.5, Float::DIG+1), 0.5.to_d, delta)
+    assert_in_delta(BigDecimal(355.0/113.0, Float::DIG+1), (355.0/113.0).to_d, delta)
+  end
+
+  def test_Float_to_d_with_precision
+    digits = 5
+    delta = 1.0/10**(digits)
+    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
 end

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

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