On Dec 5, 4:54 am, hemant <gethem... / gmail.com> wrote: > On Dec 5, 2007 5:22 PM, hemant <gethem... / gmail.com> wrote: > > > > > On Dec 5, 2007 5:00 PM, Ivo Dancet <caifara.subscr... / gmail.com> wrote: > > > Hi > > > > I thought, why search for two hours being totally frustrated if I can > > > just ask... > > > > why does this happen: > > > > >> 73.07-63.00 > > > => 10.07 # ok, normal! > > > >> 73.07-64.00 > > > => 9.06999999999999 # why oh why? > > > Thats folly of floats, you can't do much apart from : > > > sprintf("%.2f",(73.07-64.00)).to_f > > generally, I add a method to Float class like this: > > class Float > def r2p places > sprintf("%.#{places}f",self).to_f > end > end Note that, due to the nature of floats, calling to_f on that string brings you back into the problem again: x = ( 73.07 - 64.00 ) y = x.r2p( 2 ) p x, y, "%.20f" % y #=> 9.06999999999999 #=> 9.07 #=> "9.07000000000000028422"