Bug #22087
closedOctal format specifier in alternatve form ignores zero precision if value is zero
Description
For integer types, it is documented that zero as a value results in empty output:
https://docs.ruby-lang.org/en/4.0/language/format_specifications_rdoc.html#:~:text=If%20the%20precision%20is%200%20and%20the%20value%20is%200%2C%20nothing%20is%20written
This applies when # is not given. But with #, the octal format violates that statement:
pp sprintf("%#.0b", 0) # => ""
pp sprintf("%#.0B", 0) # => ""
pp sprintf("%#.0x", 0) # => ""
pp sprintf("%#.0X", 0) # => ""
pp sprintf("%#.0o", 0) # => "0"
Updated by nobu (Nobuyoshi Nakada) 14 days ago
ยท Edited
I believe this behavior is designed to conform to the printf in ISO/IEC 9899.
Updated by Earlopain (Earlopain _) 14 days ago
- Status changed from Open to Rejected
Ah, indeed. It looked it up an you are right. From https://en.cppreference.com/c/io/fprintf
x/X:
In the alternative implementation 0x or 0X is prefixed to results if the converted value is nonzero.
o:
In the alternative implementation precision is increased if necessary, to write one leading zero. In that case if both the converted value and the precision are 0, single 0 is written.