web-dev-qa-db-ja.com

Rubyで部門の残りを見つける方法は?

Rubyを使用して部門の残りを取得しようとしています。

208を11で割ろうとしているとしましょう。

最終的には「10の残りの部分で18」でなければなりません...最終的に必要なのは10

ここに私がこれまでに得たものがありますが、このユースケースではそれが窒息します(残りは0)。

division = 208.to_f / 11
rounded = (division*10).ceil/10.0
remainder = rounded.round(1).to_s.last.to_i
44
Shpigford

モジュロ演算子:

> 208 % 11
=> 10
72
Josh Lee

整数部分だけが必要な場合は、/演算子または Numeric#div メソッドで整数を使用します。

quotient = 208 / 11
#=> 18

quotient = 208.0.div 11
#=> 18

残りだけが必要な場合は、%演算子または Numeric#modulo メソッドを使用します。

modulus = 208 % 11
#=> 10

modulus = 208.0.modulo 11
#=> 10.0

両方が必要な場合は、 Numeric#divmod メソッドを使用します。これは、レシーバーまたは引数のいずれかがfloatの場合でも機能します。

quotient, modulus = 208.divmod(11)
#=> [18, 10]

208.0.divmod(11)
#=> [18, 10.0]

208.divmod(11.0)
#=> [18, 10.0]

また、興味深いのは Numeric#remainder メソッドです。これらすべての違いは divmodのドキュメント で見ることができます。

50
Phrogz

modは剰余ではないため、 Numeric#remainder を使用してください

モジュロ:

5.modulo(3)
#=> 2
5.modulo(-3)
#=> -1

残り:

5.remainder(3)
#=> 2
5.remainder(-3)
#=> 2

ここに問題を議論するリンクがあります https://rob.conery.io/2018/08/21/mod-and-remainder-are-not-the-same/

2
xinr