Project

General

Profile

Actions

Bug #22087

closed

Octal format specifier in alternatve form ignores zero precision if value is zero

Bug #22087: Octal format specifier in alternatve form ignores zero precision if value is zero

Added by Earlopain (Earlopain _) 14 days ago. Updated 14 days ago.

Status:
Rejected
Assignee:
-
Target version:
-
ruby -v:
ruby 4.1.0dev (2026-05-29T14:34:40Z master 7a07a54298) +PRISM [x86_64-linux]
[ruby-core:125592]

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 Actions #1 [ruby-core:125593]

I believe this behavior is designed to conform to the printf in ISO/IEC 9899.

Updated by Earlopain (Earlopain _) 14 days ago Actions #2 [ruby-core:125594]

  • 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.

Actions

Also available in: PDF Atom