Hi,

I've come across a strange bug in ruby (running 1.8.6 on Linux, but
confirmed also in 1.8.5 on an older Mac).

>> (-140.14 * 100).to_i
=> -14013

The desired result is, obviously, -14014. Strangely enough:

>> (-140.14 * 100)
=> -14014.0

And:

>> k = (-140.14 * 100)
=> -14014.0
>> k.to_i
=> -14013

HOWEVER......

>> -14014.0.to_i
=> -14014

Is this a strange behaviour or what?

Workaround is like this:

>> k.to_s.to_i
=> -14014

Can someone please confirm this strange behaviour?... I know it is
also happening for some other numbers too:

(0..1000).each do |n|
	n = n.to_f + (n.to_f / 100)
	k = (n * 100)
	if k != k.to_s.to_f
	  puts "K does not equal itself!? #{k} != #{k.to_s.to_f}"
  end

	if k.to_i != k.to_s.to_i
		puts "Error with k = #{k}!? #{k.to_i} != #{k.to_s.to_i}"
	end
end

I know a lot about floating point numbers, but this is really bizarre
behaviour.

Expected behaviour would be for no errors in the above test example. I
don't expect floating point to be accurate (this is obvious), but I do
expect floating point to be consistent (whole number floating point is
guaranteed to be accurate with IEEE floating point standard right??).

Thanks to anyone who can test this out.

Kind Regards,
Samuel Williams