Dan Janowski wrote:

> I can understand floating point errors, but this one seems too small for 
> that.
> Especially given this:
> 
> irb(main):023:0> v=100.0*9.95
> => 995
> irb(main):024:0> v.to_i
> => 994
> 
> 
> irb(main):016:0> (100.0*9.95).to_i
> => 994
> irb(main):017:0> (100*9.95).to_i
> => 994
> irb(main):018:0> (100*9.95+0.0000000000001).to_i
> => 995
> irb(main):019:0> RUBY_VERSION
> => "1.8.1"
> irb(main):020:0> RUBY_PLATFORM
> => "sparc-solaris2.8"
> 
> 
> irb(main):020:0> (100.0*9.95).to_i
> => 994
> irb(main):021:0> (100*9.95).to_i
> => 994
> irb(main):022:0> (100*9.95+0.0000000000001).to_i
> => 995
> irb(main):023:0> RUBY_VERSION
> => "1.6.8"
> irb(main):024:0> RUBY_PLATFORM
> => "powerpc-darwin7.0"
> 
> Dan
> 
> 

 >ri Float#to_i
------------------------------------------------------------- Float#to_i
      flt.to_i       => integer
      flt.to_int     => integer
      flt.truncate   => integer
------------------------------------------------------------------------
      Returns _flt_ truncated to an +Integer+.

you may want to try

 >ri Float#round
------------------------------------------------------------ Float#round
      flt.round   => integer
------------------------------------------------------------------------
      Rounds _flt_ to the nearest integer. Equivalent to:

         def round

           return floor(self+0.5) if self > 0.0

           return ceil(self-0.5)  if self < 0.0

           return 0.0

         end



         1.5.round      #=> 2

         (-1.5).round   #=> -2


Hope that helps,

Walt

-- 
Walter Szewelanczyk
IS Director
M.W. Sewall & CO.        email : walter / mwsewall.com
259 Front St.            Phone : (207) 442-7994 x 128
Bath, ME 04530           Fax   : (207) 443-6284