misokuan - 1 year ago 131

Ruby Question

I'm new to Ruby and I'm trying to figure out how .ceil and .floor works as I get different answers when a fraction or a decimal number is used (similar value). These are the codes used:

`puts 8/3.ceil == 2`

puts 8/3.floor == 2

puts 2.67.ceil == 2

puts 2.67.floor == 2

Results:

`true`

true

false

true

From my understanding, .ceil should return a number higher and .floor is a number lower. Hope someone can enlighten me on this. Thank you! :)

Answer Source

Everything is returned correctly.

```
puts 8/3.ceil == 2
#=> true, because 8/3 returns an Integer, 2
puts 8/3.floor == 2
#=> true, because 8/3 returns an Integer, 2
puts 2.67.ceil == 2
#=> false, because 2.67.ceil is 3
puts 2.67.floor == 2
#=> true, because true :)
```

To make things of more sense here, you can convert results to Float:

```
(8.to_f / 3).ceil == 2 #=> false
(8.to_f / 3).floor == 2 #=> true
2.67.ceil == 2 #=> false
2.67.floor == 2 #=> true
```

Another thing to bear in mind, that having written `8/3.ceil`

is actually `8 / (3.ceil)`

, because the `.`

binds stronger than `/`

. (thx **@tadman**)

Yet another thing to mention, is that (thx **@Stefan**):

There's also

`fdiv`

to perform floating point division, i.e.`8.fdiv(3).ceil`

. And Ruby also comes with a nice`Rational`

class:`(8/3r).ceil`

.