Question about digits

C

CHubas

While playing a little with Ruby, I've been looking for a function
each_digit, or something similar, and I couldn't find any (standard
nor library). I think it'd be useful to have a function like that.
It's pretty simple to implement one for Integers

class Integer
def each_digit(base = 10, &block)
return if zero?
(self/base).each_digit(base, &block)
yield self % base
end
end

A first approach. Of course, it would be a little more complicated for
negatives and Floats, specially dealing with precision.

What do you think?
 
X

Xavier Noria

While playing a little with Ruby, I've been looking for a function
each_digit, or something similar, and I couldn't find any (standard
nor library). I think it'd be useful to have a function like that.
It's pretty simple to implement one for Integers

class Integer
def each_digit(base = 10, &block)
return if zero?
(self/base).each_digit(base, &block)
yield self % base
end
end

A first approach. Of course, it would be a little more complicated for
negatives and Floats, specially dealing with precision.

Good. I'd expect each_digit to return strings though, since a digit
is a symbol, not a number:

class Integer
def each_digit(base=10)
abs.to_s(base).each_byte do |b|
yield b.chr
end
end
end

-- fxn
 
F

Fer#

Why call them digits, if you can call them characters?

If you have got arbitrary_number, you got arbitrary_number.to_s so:

----
irb(main):001:0> arbitrary_number=123
=> 123
irb(main):002:0> arbitrary_number.to_s
=> "123"
irb(main):002:0> arbitrary_number.to_s.length
=> 3
irb(main):003:0> (0...arbitrary_number.to_s.length).map{|digit|
arbitrary_number.to_s.split('')[digit]}
=> ["1","2","3"]
----

This above will do for base 10, and printf stuff may help with hex,
oct at least.

Remember it is '...' and not '..' so you don't access
arbitrary_number[arbitrary_number.length]

Hope this may help you
 
V

Vidar Hokstad

Why call them digits, if you can call them characters?

If you have got arbitrary_number, you got arbitrary_number.to_s so: [... snip]
This above will do for base 10, and printf stuff may help with hex,
oct at least.

Actually, Fixnum#to_s and Bignum#to_s takes optional arguments
specifying base, so to handle hex you'd do arbitrary_number.to_s(16)
etc.

Vidar
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,534
Members
45,008
Latest member
Rahul737

Latest Threads

Top