Project

General

Profile

Bug #15426

BigDecimal: "1.2.3".to_d が 0.0 になる

Added by tommy (Masahiro Tomita) 8 months ago. Updated 8 months ago.

Status:
Closed
Priority:
Normal
Target version:
-
ruby -v:
ruby 2.6.0rc2 (2018-12-15 trunk 66408) [x86_64-linux]
[ruby-dev:50712]

Description

Ruby 2.6.0-rc2 で "1.2.3".to_d が 0.0 になります。

% ruby -v -rbigdecimal -rbigdecimal/util -e 'p "1.2.3".to_d'
ruby 2.6.0rc2 (2018-12-15 trunk 66408) [x86_64-linux]
0.0

Ruby 2.5.3p105 では 0.12e1 を返してました。

% ruby -v -rbigdecimal -rbigdecimal/util -e 'p "1.2.3".to_d'
ruby 2.5.3p105 (2018-10-18 revision 65156) [x86_64-linux]
0.12e1

NEWS の

* String#to_d parses the receiver string like String#to_f.

この記述がそうなのかと思ったのですが、"1.2.3".to_f は 1.2 を返すのでなんか違うような気もします。

History

Updated by nobu (Nobuyoshi Nakada) 8 months ago

こんなところでしょうか。

diff --git i/ext/bigdecimal/bigdecimal.c w/ext/bigdecimal/bigdecimal.c
index 64d7f20078..052fdc57b9 100644
--- i/ext/bigdecimal/bigdecimal.c
+++ w/ext/bigdecimal/bigdecimal.c
@@ -4271,7 +4271,7 @@ VpAlloc(size_t mx, const char *szVal, int strict_p, int exc)
             while (ISSPACE(szVal[j])) ++j;

             /* Invalid character */
-            if (szVal[j]) {
+            if (szVal[j] && strict_p) {
                 goto invalid_value;
             }
         }
diff --git i/test/bigdecimal/test_bigdecimal_util.rb w/test/bigdecimal/test_bigdecimal_util.rb
index 04c8eb2b46..bb9ed83185 100644
--- i/test/bigdecimal/test_bigdecimal_util.rb
+++ w/test/bigdecimal/test_bigdecimal_util.rb
@@ -74,6 +74,7 @@
     assert_equal(BigDecimal('0.1'), "0.1_e10".to_d)
     assert_equal(BigDecimal('0.1'), "0.1e_10".to_d)
     assert_equal(BigDecimal('1'), "0.1e1__0".to_d)
+    assert_equal(BigDecimal('1.2'), "1.2.3".to_d)

     assert("2.5".to_d.frozen?)
   end

Updated by nobu (Nobuyoshi Nakada) 8 months ago

  • Assignee set to mrkn (Kenta Murata)
  • Status changed from Open to Assigned

Updated by mrkn (Kenta Murata) 8 months ago

  • Status changed from Assigned to Closed

bigdecimal 1.4.0.pre.20181220a で修正しました。

Also available in: Atom PDF