web-dev-qa-db-ja.com

Ruby .ceilおよび.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は高い数値を返し、floorは低い数値を返すはずです。誰かがこれについて私を啓発できることを願っています。ありがとうございました! :)

22
misokuan

すべてが正しく返されます。

_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
_

ここでよりわかりやすくするために、結果をフロートに変換できます。

_(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)であることに注意してください。 (thx@ tadman

さらに別のことは、(thx@ Stefan):

fdiv もあり、浮動小数点除算を実行します。つまり、8.fdiv(3).ceilです。また、RubyにはNiceも付属しています Rational class:_(8/3r).ceil_。

35
Andrey Deineko