1. ホーム
  2. ruby

[解決済み] ルビー.天井と.床

2022-02-15 10:43:34

質問

私は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 は低い数字です。どなたかご教示いただけると幸いです。ありがとうございます。:)

どのように解決するのですか?

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

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) というのは . よりも強く結合する。 / . (thx タッドマン )

さらにもう一つ、(thx ステファン ):

また、次のようなものもあります。 fdiv で浮動小数点数の除算を行う、つまり 8.fdiv(3).ceil . また、Rubyには素敵な Rational クラスがあります。 (8/3r).ceil .