From: hsbt@...
Date: 2017-03-24T00:27:28+00:00
Subject: [ruby-core:80297] [Ruby trunk Bug#13062] 2.4.0-rc1 BigDecimal regression - to_d inconsistent with other numeric classes

Issue #13062 has been updated by hsbt (Hiroshi SHIBATA).


You can install and use bigdecimal-1.3.1 via standalone gem with Ruby 2.4

----------------------------------------
Bug #13062: 2.4.0-rc1 BigDecimal regression - to_d inconsistent with other numeric classes
https://bugs.ruby-lang.org/issues/13062#change-63767

* Author: jhawthorn (John Hawthorn)
* Status: Closed
* Priority: Normal
* Assignee: mrkn (Kenta Murata)
* Target version: 
* ruby -v: 2.4.0-rc1
* Backport: 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
To solve #10286, `BigDecimal()` was changed to raise exceptions on invalid input, which is more consistent with the other numeric types.

Unfortunately, `String#to_d` now also raises errors, which is inconsistent with the other `to_*` methods (`to_i`, `to_f`), which return 0 on error.

Under ruby 2.4.0-rc1:

~~~ ruby
> require 'bigdecimal'
> require 'bigdecimal/util'
> "invalid".to_d
ArgumentError: invalid value for BigDecimal(): "invalid"
> "invalid".to_i
=> 0
> "invalid".to_f
=> 0.0
~~~


Under ruby 2.3.3 or 2.4.0preview3:

~~~ ruby
> "invalid".to_d
=> #<BigDecimal:55871ca1f808,'0.0',9(9)>
> "invalid".to_i
=> 0
> "invalid".to_f
=> 0.0
~~~

There's also a further problem that BigDecimal() still doesn't behave the same as Integer() when given a string with the number at the start:

Under ruby 2.4.0-rc1:

~~~ ruby
> BigDecimal("2 turtle doves")
=> 0.2e1
> Integer("2 turtle doves")
ArgumentError: invalid value for Integer(): "2 turtle doves"
> Float("2 turtle doves")
ArgumentError: invalid value for Float(): "2 turtle doves"
~~~

So `BigDecimal` is still inconsistent.

---Files--------------------------------
fix_13062_string_to_d.patch (1.57 KB)


-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>