How to return a float from a method?

I am orienting in ruby and crystal. Because the syntax is so similar:

def interpolation(x,y,z)
(z - x) / (y - x)
end

puts interpolation(1,3,2)

end code
I read that the last statement in a method is returned. Why is this method returning 0? it should return 0.5

ps. how to correctly post code into this forum?

When you use integers, you get integer division. You can use to_f to force a number to be a float:

> 4/3
 => 1 
> 4.0/3
 => 1.3333333333333333 
> 4.to_f/3
 => 1.3333333333333333 
> def interpolation(x,y,z)
>   (z - x) / (y - x)
> end
 => :interpolation 
> interpolation(1,3,2)
 => 0 
> interpolation(1.0,3,2)
 => 0.5 
> def interpolation(x,y,z)
>   (z-x).to_f/(y-x).to_f
> end
 => :interpolation 
> interpolation(1,3,2)
 => 0.5 

Three back ticks top-and-bottom.

2 Likes

Ah now I understand! I ended up with this for the eye-candy:

def interpolation(x,y,z)
  x = x.to_f
  y = y.to_f
  z = z.to_f
  (z - x) / (y - x)
end
1 Like