Function for integers to displayed with same number of digit

Is there or a function, or anyone know of a hack without using if else
statements extensivley to have numbers displayed, such as 1 as 0001, 100
as 0100, 1000 as 1000 etc?

Anyhelp is appreciated, thanks!

Here’s what I’ve done. Numeric formatting for output is most natural
with printf(): ‘printf("%d", )’, where is the number of
digits, is the number to be displayed, and is the fill
character. So

printf( "%04d", 100 )

yields ‘0100’, as you’re padding with zeros out to four places.

This is all well and good for display purposes, but what about for

internal use? The only solution I’ve found so far is to use the
stringio library, which works a bit like C++'s , if you’re
familiar with that. That is, it lets you do I/O operations on Strings.
But it can be a bit odd until you get used to it. If, as above, you
wanted to convert a number to a four-character string:

require 'stringio'
s = String.new
StringIO.new( s ).printf("%04d", 100)

Variable s will now hold ‘0100’. The StringIO ctor takes a reference
to an existing String, so you can’t do the whole operation in one
command. Note that s now functions like an output stream, repeated
StringIO operations appending to it rather than overwriting it, and you
must manually “flush” it with an empty-string assignment if you intend
to reuse it as an output buffer.
Boy, I got to use a lot of jargon in that one.

-Jonathan

Adrian F. wrote:

Is there or a function, or anyone know of a hack without using if else
statements extensivley to have numbers displayed, such as 1 as 0001, 100
as 0100, 1000 as 1000 etc?

Anyhelp is appreciated, thanks!

irb(main):001:0> “%04d” % 1
=> “0001”

Well, thanks a lot! Don’t I feel like a jackass now? I didn’t know
old frog-eyes accepted format arguments, although of course it makes
sense.

-J

Adrian F. wrote:

Hey, thanks to both of you for your help. I had no idea Modulus acted
like that.

It’s the first Instance method for the String class in the Pickaxe book.

Michael W. Ryder wrote:

Adrian F. wrote:

Is there or a function, or anyone know of a hack without using if else
statements extensivley to have numbers displayed, such as 1 as 0001, 100
as 0100, 1000 as 1000 etc?

Anyhelp is appreciated, thanks!

irb(main):001:0> “%04d” % 1
=> “0001”

Hey, thanks to both of you for your help. I had no idea Modulus acted
like that.