From: nobu@... Date: 2018-12-18T01:45:59+00:00 Subject: [ruby-dev:50713] [Ruby trunk Bug#15426] BigDecimal: "1.2.3".to_d が 0.0 になる Issue #15426 has been updated by nobu (Nobuyoshi Nakada). こんなところでしょうか。 ```diff 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 ``` ---------------------------------------- Bug #15426: BigDecimal: "1.2.3".to_d が 0.0 になる https://bugs.ruby-lang.org/issues/15426#change-75747 * Author: tommy (Masahiro Tomita) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.6.0rc2 (2018-12-15 trunk 66408) [x86_64-linux] * Backport: 2.4: UNKNOWN, 2.5: UNKNOWN ---------------------------------------- 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 を返すのでなんか違うような気もします。 -- https://bugs.ruby-lang.org/