Bug #13848'200.') raises an exception

Added by ddoherty03 (Daniel Doherty) 6 months ago. Updated about 2 months ago.

Target version:
ruby -v:
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

Description'200.') raises an exception:

ArgumentError: invalid value for BigDecimal(): "200."

It should accept this as a valid decimal number.

This requires fixing numbers read in from the wild.


#1 [ruby-core:82514] Updated by shevegen (Robert A. Heiler) 6 months ago

I believe you mean for'200.') to be equivalent to'200.0')?

I could see both ways be ok; there may be use cases where the error is better because of
the user not being explicit enough; or the user does not want to have to type in the
trailing '0'. So I can't say whether this is really a bug or not, it may be specifically
wanted to be that way.

I guess if there are no trade offs though, then I'd agree with the proposal if you meant
that it is the same to mean for a trailing '0' there - but I could also see for purity
to require the '0' to be passed.

What about input such as:'0.')

I mean it will be 0 anyway... it reads strangely to omit the the '0' to my eyes though ...

Latest docu can be found here, if anyone else is interested:

#2 [ruby-core:82534] Updated by ddoherty03 (Daniel Doherty) 6 months ago

Robert, yes, I think it should be the same as'200.0'). The problem arises, not when a programmer is typing the number---requiring a programmer to be explicit is OK by me---but when strings are processed that come from a user of the code.

ss = '200.' # Read from a user-prepared file. => ArgumentError ...

As it is, the programmer has to massage every string to recognize a reasonable, albeit a bit sloppy, string that is clearly meant as a valid number.

Also, it seems crazy to me that'200hello world') => 0.2e3

but BigDecimal('200.') raises an ArgumentError exception. Just sayin...


#3 [ruby-core:82686] Updated by kernigh (George Koehler) 6 months ago

Float('200.') also raises ArgumentError. In this way, seems consistent with Float. But it's strange that Float('200hello world') raises ArgumentError but'200hello world') succeeds.

#4 [ruby-core:84237] Updated by mrkn (Kenta Murata) 2 months ago

  • Target version set to 2.6
  • Assignee set to mrkn (Kenta Murata)
  • Status changed from Open to Assigned

#5 Updated by naruse (Yui NARUSE) about 2 months ago

  • Target version deleted (2.6)

Also available in: Atom PDF