Bug #1566


sprintf with %e or %E Format Specifer Incorrectly Capitalises Inf and NaN

Added by runpaint (Run Paint Run Run) over 14 years ago. Updated over 10 years ago.

Target version:
ruby -v:
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]


sprintf/String#% use the %e and %E format specifier to determine the case of results which are NaN or Inf. For example:

$ ruby1.8 -ve 'p sprintf("%e", 0.0/0)'
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]

$ ruby1.8 -ve 'p sprintf("%E", 0.0/0)'
ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]

I suspect this is wrong for the following reasons:

  • 1.9 doesn't capitalise these values, i.e. it always returns Inf or NaN.
  • The rdoc description for the %E field is "Equivalent to `e', but uses an uppercase E to indicate the exponent." Neither Inf or NaN are exponents.
  • The description for the %e field doesn't make any mention of it's output case.
  • JRuby, and I believe Rubinius, behave as 1.9 does.
  • NaN and Inf have specific mathematical meanings; it doesn't make sense to subject them to English capitalisation rules.


fix-nan-and-inf-in-sprintf.diff (507 Bytes) fix-nan-and-inf-in-sprintf.diff Fix NaN and Inf capitalization in sprintf m (m .), 09/08/2009 07:53 AM
Actions #1

Updated by m (m .) about 14 years ago

The attached patch fixes this by removing the Windows-only ifdef that currently guards the portion of the code doing the formatting of the resulting string.

I'm not sure of why it was guarded in the first place (the code works fine in OS X) so please test this on Linux/other platforms and apply if you consider this change is worth making.

Actions #2

Updated by nobu (Nobuyoshi Nakada) about 14 years ago

  • Status changed from Open to Assigned
  • Assignee set to knu (Akinori MUSHA)
  • Target version changed from Ruby 1.8.6 to Ruby 1.8.8



Updated by naruse (Yui NARUSE) over 10 years ago

  • Description updated (diff)
  • Status changed from Assigned to Rejected

1.8's sprintf is a simple wrapper of sprintf(3).
sprintf(3)'s e/E behaves as you said.
See also


Also available in: Atom PDF