2007/04/11

Why (-9.5).round isn't -9?

Ruby
Why (-9.5).round isn't -9?
From irb console, if you type (-9.5).round, you'll get -10 as a result.Why this occur? You can see same answer from Microsoft Excel.So I searched RDoc. And here's the answer.

1. num.round => integerRounds num to the nearest integer. Numeric implements
this by converting itself to a Float and invoking Float#round.


2. flt.round => integerRounds flt to the nearest integer. Equivalent to:

def round

return (self+0.5).floor if self > 0.0

return (self-0.5).ceil if self <0.0

return 0

end

1.5.round #=> 2
(-1.5).round #=> -2


3. num.ceil => integerReturns the smallest Integer greater than or equal to num. Class Numeric achieves this by converting itself to a Float then invoking Float#ceil.

1.ceil #=> 1
1.2.ceil #=> 2
(-1.2).ceil #=> -1
(-1.0).ceil #=> -1


4. flt.ceil => integerReturns the smallest Integer greater than or
equal to flt.
1.2.ceil #=>2
2.0.ceil #=> 2
-1.2).ceil #=> -1
(-2.0).ceil #=> -2


If you want real answer for that, use (-9.5).ceil

(-9.49999999999999999999999999).round #=> -10
(-9.49999999999999999999999999).ceil #=> -9
(9.49).round #=> 9
(9.49999999999999999999).round #=> 10





0 comments:

Post a Comment