Thank you all I found why that happen... On Wed, Mar 31, 2010 at 11:39 PM, Jeffrey L. Taylor <[email protected]>wrote:
> Quoting anton effendi <[email protected]>: > > Hii All > > > > I use ruby 1.8.7 > > I run irb and type: > > > > a = (0.29 * 100).to_i > > > > the result is 28 > > Here's why: > > irb(main):008:0> '%0.16f' % (0.29 * 100) > => "28.9999999999999964" > > Most decimal fractions cannot be represented exactly in binary. If you > need > them to behave in certain ways, e.g. using real numbers to represent US > dollars and cents, take care and learn to use the following functions as > needed. > > irb(main):002:0> (0.29 * 100).to_i > => 28 > irb(main):003:0> (0.29 * 100).round > => 29 > irb(main):004:0> (0.29 * 100).floor > => 28 > irb(main):005:0> (0.29 * 100).ceil > => 29 > irb(main):009:0> (-0.29 * 100) > => -29.0 > irb(main):010:0> (-0.29 * 100).to_i > => -28 > irb(main):011:0> (-0.29 * 100).floor > => -29 > irb(main):012:0> (-0.29 * 100).round > => -29 > irb(main):013:0> (-0.29 * 100).ceil > => -28 > > > IIRC, .to_i rounds towards zero, .floor rounds down, .ceil rounds up, and > .round adds 1/2 and rounds towards zero. > > HTH, > Jeffrey > > P.S. if you are in the financial field, the SEC has rules on how to do > arithmetic in US dollars and cents. > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]<rubyonrails-talk%[email protected]> > . > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. > > -- Senior Rails Developer Anton Effendi - Wu You Duan -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

