Project

General

Profile

Bug #12718

Updated by nobu (Nobuyoshi Nakada) over 7 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