Project

General

Profile

Bug #12718

Updated by nobu (Nobuyoshi Nakada) almost 3 years ago

```ruby
Integer("2") # => 2
Integer("invalid") # raises ArgumentError: invalid value for Integer()

Float("2.0") # => 2.0
Float("invalid") # raises ArgumentError: invalid value for Float()
```


BUT

```ruby
BigDecimal("2.2") # => #<BigDecimal:7fb9ab1a9d40,'0.22E1',18(18)>
BigDecimal("invalid") # => #<BigDecimal:7fb9ab1b28c8,'0.0',9(9)>
```


I think `BigDecimal("invalid")` BigDecimal("invalid") should raise rather than returning a `BigDecimal` BigDecimal representing `0`, to be consistent with `Integer()` Integer() and `Float()`, Float(), and to give you access to a string conversion that raises, which I don't think exists in stdlib at present.

If you want conversion of a string to a `BigDecimal` BigDecimal that returns `0` 0 rather than raising on bad input, you have String#to_d in `bigdecimal/util`. That's consistent with `String#to_f` String#to_f and `#to_i` #to_i as well. But there is currently no way to do a conversion that raises, `BigDecimal()` BigDecimal() is inconsistent with `Float()` Float() and `Integer()` Integer()

Back