Welcome to floating point math. There are many numbers which cannot be represented in standard floating point notation and come out just a tiny bit off.
This is easily illustrated as follows:
(1..10).collect do |i|
v = ((10**i).to_f + 0.7)
puts "%13.1f = %.30f" % [ v, v.modulo(1) ]
end
Where the result is:
10.7 = 0.699999999999999289457264239900
100.7 = 0.700000000000002842170943040401
1000.7 = 0.700000000000045474735088646412
10000.7 = 0.700000000000727595761418342590
100000.7 = 0.699999999997089616954326629639
1000000.7 = 0.699999999953433871269226074219
10000000.7 = 0.699999999254941940307617187500
100000000.7 = 0.700000002980232238769531250000
1000000000.7 = 0.700000047683715820312500000000
10000000000.7 = 0.700000762939453125000000000000
Notice that the larger the number gets, the lower the precision beyond the decimal place. This is because there is a fixed amount of precision available to represent the entire number.