diff options
author | Kenta Murata <mrkn@mrkn.jp> | 2021-01-13 10:28:23 +0900 |
---|---|---|
committer | Kenta Murata <mrkn@mrkn.jp> | 2021-01-13 11:49:18 +0900 |
commit | a5b4b806de3b130348a92aa3306fbb9318efb762 (patch) | |
tree | f4786635a2c3ba9b7c98588542f60264add5b70d /test | |
parent | 30f13164011dd876fd95a0e3fcd7c1224c4e04b5 (diff) | |
download | ruby-a5b4b806de3b130348a92aa3306fbb9318efb762.tar.gz |
[ruby/bigdecimal] Allow digits=0 in BigDecimal(flt) and Float#to_d
Using dtoa of mode=0, we can determine the number of digits in decimal that is
necessary to represent the given Float number without errors.
This change permits digits=0 in BigDecimal(flt) and Float#to_d, and these
methods use dtoa of mode=0 when the given digits is 0.
Internal implicit conversion from Float also uses digits=0.
[Fix GH-70]
https://github.com/ruby/bigdecimal/commit/2dbe170e35
Diffstat (limited to 'test')
-rw-r--r-- | test/bigdecimal/test_bigdecimal.rb | 2 | ||||
-rw-r--r-- | test/bigdecimal/test_bigdecimal_util.rb | 8 |
2 files changed, 7 insertions, 3 deletions
diff --git a/test/bigdecimal/test_bigdecimal.rb b/test/bigdecimal/test_bigdecimal.rb index e8fd85a526..0063fb9743 100644 --- a/test/bigdecimal/test_bigdecimal.rb +++ b/test/bigdecimal/test_bigdecimal.rb @@ -917,6 +917,7 @@ class TestBigDecimal < Test::Unit::TestCase def test_mult_with_float assert_kind_of(BigDecimal, BigDecimal("3") * 1.5) + assert_equal(BigDecimal("64.4"), BigDecimal(1) * 64.4) end def test_mult_with_rational @@ -955,6 +956,7 @@ class TestBigDecimal < Test::Unit::TestCase def test_div_with_float assert_kind_of(BigDecimal, BigDecimal("3") / 1.5) + assert_equal(BigDecimal("0.5"), BigDecimal(1) / 2.0) end def test_div_with_rational diff --git a/test/bigdecimal/test_bigdecimal_util.rb b/test/bigdecimal/test_bigdecimal_util.rb index 9c6973dca7..ffd4c5f679 100644 --- a/test/bigdecimal/test_bigdecimal_util.rb +++ b/test/bigdecimal/test_bigdecimal_util.rb @@ -19,11 +19,11 @@ class TestBigDecimalUtil < Test::Unit::TestCase 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) + assert_in_delta(BigDecimal(0.5, 0), 0.5.to_d, delta) + assert_in_delta(BigDecimal(355.0/113.0, 0), (355.0/113.0).to_d, delta) assert_equal(9.05, 9.05.to_d.to_f) - assert_equal("9.050000000000001", 9.05.to_d.to_s('F')) + assert_equal("9.05", 9.05.to_d.to_s('F')) assert_equal(Math::PI, Math::PI.to_d.to_f) @@ -34,6 +34,8 @@ class TestBigDecimalUtil < Test::Unit::TestCase assert_raise(TypeError) { 0.3.to_d(false) } assert(1.1.to_d.frozen?) + + assert_equal(BigDecimal("999_999.9999"), 999_999.9999.to_d) end def test_Float_to_d_with_precision |