-4

重複の可能性:
Ruby は正しく分割することを拒否している

私はRuby on Rails 3.2.2を使用しています。計算しようとする10 * (50 / 100)と返され0ましたが、作成する10 * 50 / 100と返されました5

技術的な理由から、私のコードは次のようなものであるため、後者は使用できません。

perc = 50 /100

# Some code that uses the 'perc' variable
... = method_name(perc)

return 10 * perc

問題を解決して5( not 5.0または何か他のもの; つまり、返品が になるようにInteger) を解決するには、何を作成する必要がありますか?

4

4 に答える 4

8

整数除算を使用しているため、50 / 100 は 0 です。結果は整数に切り捨てられます。

最初に乗算を実行すると、除算によって整数が得られるため、機能します。

整数の代わりに浮動小数点数を使用して計算を実行できます: 50.0 / 100.0 == 0.5、計算の最後に結果を整数に丸めます。

proportion = 50.0 / 100.0
result = (10 * proportion).round
return result

オンラインでの動作を確認してください: ideone

于 2012-05-18T13:05:16.523 に答える
2

50/100 は整数除算で 0 を返します。50.0/100.0 を試すと、.5 になります。

于 2012-05-18T13:05:44.183 に答える
1

Rubyに詳しくありませんが、答えは操作の順序にある​​と思います。

の場合10 * (50 / 100)、プログラムは最初に を計算(50 / 100)し、結果は になり0.5ます。整数で作業しているため、これは に丸められ0、その理由が説明され10 * (50 / 100) = 0ます。

の場合10 * 50 / 100、プログラムは最初に を計算します。10 * 50これは500です。次に、この結果を で割る100と、 が得られます10 * 50 / 100 = 5

于 2012-05-18T13:08:01.057 に答える
0

質問の最後の部分はtypecastingについてです。

return 10 * perc5.0 ではなく結果として 5 を取得したい場合は、return (Integer) 10 * percまたはのように整数にキャストする必要があります。return (10 * perc).to_i

于 2012-05-18T13:23:09.510 に答える