Ruby .ceil 和 .floor

Ruby .ceil and .floor

我是 Ruby 的新手,我正在尝试弄清楚 ceilfloor 是如何工作的,因为在使用分数或小数时我会得到不同的答案(相似的价值)。以下是我尝试过的:

puts 8/3.ceil == 2   #=> true
puts 8/3.floor == 2  #=> true
puts 2.67.ceil == 2  #=> false
puts 2.67.floor == 2 #=> true

根据我的理解,ceil 应该 return 更高,floor 应该更低。希望有人能启发我。谢谢! :)

一切都正确返回。

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 2.67.floor is 2

为了使这里的事情更有意义,您可以将结果转换为 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

另一件事要记住,写8/3.ceil实际上是8 / (3.ceil),因为./结合得更牢固。 (谢谢 @tadman

还有一件事要提到,是 (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.