私は現在counts["email"]
を、数値が82,000のハッシュに、total
という値130万を含む変数で除算しようとしています。Fixnumを別のFixnumで分割できないのはなぜですか?
私はputs counts["email"]/total
を実行すると、私は0
は、なぜ私はこれらに除算を実行することはできません取得しますか?
私は現在counts["email"]
を、数値が82,000のハッシュに、total
という値130万を含む変数で除算しようとしています。Fixnumを別のFixnumで分割できないのはなぜですか?
私はputs counts["email"]/total
を実行すると、私は0
は、なぜ私はこれらに除算を実行することはできません取得しますか?
これはRubyの仕組みなので、整数を整数に分割すると整数になります。この場合、結果の整数部分であるため、0になります。
浮動小数点の結果を得るには、実際に浮動小数点数が必要だとRubyに伝えてください。それを行うには多くの方法があります、私はあなたが期待できないものの1
puts counts["email"]/total.to_f
Rubyだけでなく、これが大部分のプログラミング言語の動作です!分母を浮動小数点数に変換することは、これを解決する唯一の方法ではありません。数学的精度が望まれるなら、 'Rational(counts [" email "]、total)'が優れています。 'Rational'は1.9より前のバージョンの標準ライブラリにあることに注意してください。 – Max
私は、言語が動的にタイプされているのか静的にタイプされているのかを議論しています。後者が 'Float'型であっても、Perl、JavaScript、PHP(私が最もよく働いた言語)はここで浮動小数点値を出力します。 – raina77ow
RubyとPython 2.7(Python 3ではなく)は、動的除算型言語であり、整数除算の結果はfloatではなく整数商となります。 – Max
「完全な」結果を得るには、浮動小数点数を使用する必要があります。
counts["email"]/total.to_f
あなたは、除算を実行している...最も簡単なだけでフロートするオペランドの1に変換されるだろうと思います。
# Integer division:
5/4 # => 1
# Floating point division:
5.fdiv(4) # => 1.25
# Rational division:
5.quo(4) # => Rational(5, 4)
ます。またFloat
かRational
にあなたの整数のいずれかを変換することができます:最初のfdiv
を呼び出す
5.to_f/4 # => 1.25
5.to_r/4 # => Rational(5, 4)
注意が直接fasterで呼び出すよりも、Rubyで整数を分割するさまざまな方法があります。 to_f
、次に/
演算子を使用します。また、浮動小数点除算を使用していることが明らかになります。
-1のコメントをいただければ幸いです。 –
両方のオペランドが整数の場合、Rubyは整数除算を実行します。http://mathworld.wolfram.com/IntegerDivision.html –