# Decimal in for loop?

Hi, I have a quick question: How can I increase a valuable by a certain
decimal (not an integer) in a for loop?

For example, in C,

for( i = 0; i < 0.5; i += 0.1 )
printf( "%f ", i );

the code above returns

0.0 0.1 0.2 0.3 0.4

How can I write this in Ruby?

Thanks,
Nathan

ps I looked in several Ruby tutorials, but couldn’t find any example
using a decimal. . . Should I use another loop syntax like ‘loop’ or
‘while/until’?

Hello Nathan,

the code above returns

0.0 0.1 0.2 0.3 0.4

How can I write this in Ruby?

Use the step method for all descendant of Numeric class:

0.step(0.5,0.1) { |i| p i }
0.0
0.1
0.2
0.3
0.4
0.5
=> 0

0.1.step(0.5,0.1) { |i| p i }
0.1
0.2
0.3
0.4
0.5
=> 0.1

Cheers,

Thanks a lot for the quick responding, Fleck, your suggestion works!
-Nathan

On Sat, Jan 09, 2010 at 04:04:43PM +0900, Nathan O. wrote:

0.0 0.1 0.2 0.3 0.4

How can I write this in Ruby?

Thanks,
Nathan

ps I looked in several Ruby tutorials, but couldn’t find any example
using a decimal. . . Should I use another loop syntax like ‘loop’ or
‘while/until’?

while or until would both work. I can think of three ways off the top

``````(0..0.4).step(0.1) do |f|
p f
end

x = 0
while x < 0.5 do
p x
x += 0.1
end

x = 0
until x > 0.4
p x
x += 0.1
end
``````

Hope that helps!

while or until would both work.

``````x = 0
while x < 0.5 do
p x
x += 0.1
end

x = 0
until x > 0.4
p x
x += 0.1
end
``````

Yes, it is, but it looks badly long. . . As I program in Ruby, I want to
write a code as clearly as possible.

Anyway, thanks a lot for your help, Aaron. Your suggestion makes another
question, so please see the new thread ‘Ruby editing style rules and
recommendation?’

Nathan

On 2010-01-09, Nathan O. [email protected] wrote:

0.0 0.1 0.2 0.3 0.4
No, it doesn’t.

Nor does it print that (remember, “for” loops have no “return value” in
C).

It might print “0.000000 0.100000 …”.

ps I looked in several Ruby tutorials, but couldn’t find any example
using a decimal. . . Should I use another loop syntax like ‘loop’ or
‘while/until’?

Usually, this is not the right way to do it, but you might be able to
do something like this using one of the upto-like methods, I think
it might be called “step”.

-s