* [ruby-core:121205] [Ruby master Feature#21163] Inconsistencies in Kernel.Float compared to other number parsing methods
@ 2025-02-28 12:13 herwin (Herwin W) via ruby-core
2025-02-28 13:00 ` [ruby-core:121206] " Hanmac (Hans Mackowiak) via ruby-core
2025-03-19 19:38 ` [ruby-core:121411] [Ruby Bug#21163] " tenderlovemaking (Aaron Patterson) via ruby-core
0 siblings, 2 replies; 3+ messages in thread
From: herwin (Herwin W) via ruby-core @ 2025-02-28 12:13 UTC (permalink / raw)
To: ruby-core; +Cc: herwin (Herwin W)
Issue #21163 has been reported by herwin (Herwin W).
----------------------------------------
Feature #21163: Inconsistencies in Kernel.Float compared to other number parsing methods
https://bugs.ruby-lang.org/issues/21163
* Author: herwin (Herwin W)
* Status: Open
----------------------------------------
Not sure if I consider the following points to be bugs, but they sure did surprise me:
Item 1: Hexadecimal is the only prefix accepted
If you use the "0x" prefix, your value is parsed as hexadecimal float:
```ruby
Float("0x10") # => 16.0
Float("0x0.8") # => 0.5 # Since Ruby 3.4
```
This is the only accepted prefix, "010" is not parsed as octal, but as decimal 10. "0b10" and "0o10" are parse errors. If "0x" works, I would expect these to work too.
Item 2: Inconsistency with String#to_f
String#to_f does not parse hexadecimal strings, "0x10".to_f simply returns 0.0. Generally, the methods in Kernel are stricter than the methods on String, so valid input for the Kernel methods yields the same result in the String methods, I think this is the only exception
Item 3: Inconsistency with Kernel#Integer
```ruby
Integer("0x1_0a") # => 0x10a
Float("0x1_0") # => 16.0 # This underscore is accepted
Float("0x1_0a") # => ArgumentError
```
Kernel.Float does accept underscores in hexadecimal strings, but only if all values are digits. As soon as there is a `[a-fA-F]` in the input, it is an ArgumentError
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/
^ permalink raw reply [flat|nested] 3+ messages in thread
* [ruby-core:121206] [Ruby master Feature#21163] Inconsistencies in Kernel.Float compared to other number parsing methods
2025-02-28 12:13 [ruby-core:121205] [Ruby master Feature#21163] Inconsistencies in Kernel.Float compared to other number parsing methods herwin (Herwin W) via ruby-core
@ 2025-02-28 13:00 ` Hanmac (Hans Mackowiak) via ruby-core
2025-03-19 19:38 ` [ruby-core:121411] [Ruby Bug#21163] " tenderlovemaking (Aaron Patterson) via ruby-core
1 sibling, 0 replies; 3+ messages in thread
From: Hanmac (Hans Mackowiak) via ruby-core @ 2025-02-28 13:00 UTC (permalink / raw)
To: ruby-core; +Cc: Hanmac (Hans Mackowiak)
Issue #21163 has been updated by Hanmac (Hans Mackowiak).
"0b10" and "0o10" are only handled by Integer
also Integer and to_i does have a base param
while Float and to_f have not
----------------------------------------
Feature #21163: Inconsistencies in Kernel.Float compared to other number parsing methods
https://bugs.ruby-lang.org/issues/21163#change-112148
* Author: herwin (Herwin W)
* Status: Open
----------------------------------------
Not sure if I consider the following points to be bugs, but they sure did surprise me:
Item 1: Hexadecimal is the only prefix accepted
If you use the "0x" prefix, your value is parsed as hexadecimal float:
```ruby
Float("0x10") # => 16.0
Float("0x0.8") # => 0.5 # Since Ruby 3.4
```
This is the only accepted prefix, "010" is not parsed as octal, but as decimal 10. "0b10" and "0o10" are parse errors. If "0x" works, I would expect these to work too.
Item 2: Inconsistency with String#to_f
String#to_f does not parse hexadecimal strings, "0x10".to_f simply returns 0.0. Generally, the methods in Kernel are stricter than the methods on String, so valid input for the Kernel methods yields the same result in the String methods, I think this is the only exception
Item 3: Inconsistency with Kernel#Integer
```ruby
Integer("0x1_0a") # => 0x10a
Float("0x1_0") # => 16.0 # This underscore is accepted
Float("0x1_0a") # => ArgumentError
```
Kernel.Float does accept underscores in hexadecimal strings, but only if all values are digits. As soon as there is a `[a-fA-F]` in the input, it is an ArgumentError
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/
^ permalink raw reply [flat|nested] 3+ messages in thread
* [ruby-core:121411] [Ruby Bug#21163] Inconsistencies in Kernel.Float compared to other number parsing methods
2025-02-28 12:13 [ruby-core:121205] [Ruby master Feature#21163] Inconsistencies in Kernel.Float compared to other number parsing methods herwin (Herwin W) via ruby-core
2025-02-28 13:00 ` [ruby-core:121206] " Hanmac (Hans Mackowiak) via ruby-core
@ 2025-03-19 19:38 ` tenderlovemaking (Aaron Patterson) via ruby-core
1 sibling, 0 replies; 3+ messages in thread
From: tenderlovemaking (Aaron Patterson) via ruby-core @ 2025-03-19 19:38 UTC (permalink / raw)
To: ruby-core; +Cc: tenderlovemaking (Aaron Patterson)
Issue #21163 has been updated by tenderlovemaking (Aaron Patterson).
Backport changed from 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED, 3.4: REQUIRED to 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED, 3.4: DONE
Backported in e15a9044d7a9ee5435e7a6d19ef9ac46b50bb880
----------------------------------------
Bug #21163: Inconsistencies in Kernel.Float compared to other number parsing methods
https://bugs.ruby-lang.org/issues/21163#change-112389
* Author: herwin (Herwin W)
* Status: Closed
* Backport: 3.1: DONTNEED, 3.2: DONTNEED, 3.3: DONTNEED, 3.4: DONE
----------------------------------------
Not sure if I consider the following points to be bugs, but they sure did surprise me:
Item 1: Hexadecimal is the only prefix accepted
If you use the "0x" prefix, your value is parsed as hexadecimal float:
```ruby
Float("0x10") # => 16.0
Float("0x0.8") # => 0.5 # Since Ruby 3.4
```
This is the only accepted prefix, "010" is not parsed as octal, but as decimal 10. "0b10" and "0o10" are parse errors. If "0x" works, I would expect these to work too.
Item 2: Inconsistency with String#to_f
String#to_f does not parse hexadecimal strings, "0x10".to_f simply returns 0.0. Generally, the methods in Kernel are stricter than the methods on String, so valid input for the Kernel methods yields the same result in the String methods, I think this is the only exception
Item 3: Inconsistency with Kernel#Integer
```ruby
Integer("0x1_0a") # => 0x10a
Float("0x1_0") # => 16.0 # This underscore is accepted
Float("0x1_0a") # => ArgumentError
```
Kernel.Float does accept underscores in hexadecimal strings, but only if all values are digits. As soon as there is a `[a-fA-F]` in the input, it is an ArgumentError
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-03-19 19:40 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-02-28 12:13 [ruby-core:121205] [Ruby master Feature#21163] Inconsistencies in Kernel.Float compared to other number parsing methods herwin (Herwin W) via ruby-core
2025-02-28 13:00 ` [ruby-core:121206] " Hanmac (Hans Mackowiak) via ruby-core
2025-03-19 19:38 ` [ruby-core:121411] [Ruby Bug#21163] " tenderlovemaking (Aaron Patterson) via ruby-core
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).