From: p.szmielew@... Date: 2016-12-25T00:17:16+00:00 Subject: [ruby-core:78823] [Ruby trunk Bug#13062] 2.4.0-rc1 BigDecimal regression - to_d inconsistent with other numeric classes Issue #13062 has been updated by Piotr Szmielew. File fix_13062_string_to_d.patch added In attachment you will find patch for this issue. This patch fixes issue with String#to_d method which was inconsistent with other to_d methods (String one returned error, while other simply returns 0). Also, there tests added for this case. ---------------------------------------- Bug #13062: 2.4.0-rc1 BigDecimal regression - to_d inconsistent with other numeric classes https://bugs.ruby-lang.org/issues/13062#change-62231 * Author: John Hawthorn * Status: Open * Priority: Normal * Assignee: * 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 => # > "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: