1. ホーム
  2. python

[解決済み] なぜ割り算は整数に丸められるのか?

2022-06-06 03:19:36

質問

私は、-100 から 0 までの数値のセットを 10-100 の範囲に正規化しようとしていて、変数がまったくない場合でも、これが私が期待する方法で評価されないことに気づいただけで、問題がありました。

>>> (20-10) / (100-10)
0

フロート分割もうまくいきません。

>>> float((20-10) / (100-10))
0.0

除算のどちらか一方をfloatにキャストすればうまくいきます。

>>> (20-10) / float((100-10))
0.1111111111111111

最初の例の各辺はint型として評価されており、これは最終的な答えがint型にキャストされることを意味します。0.111は0.5より小さいので、0に丸められます。私の意見では、これは透明ではありませんが、それが方法だと思います。

どのような説明でしょうか?

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

Python 2.xを使用している場合、整数の割り算は浮動小数点数にならずに切り捨てられます。

>>> 1 / 2
0

そのうちの1つを float :

>>> float(10 - 20) / (100 - 10)
-0.1111111111111111

または from __future__ import division というように,力 / は常に float を返すという Python 3.x の動作を採用するように強制します。

>>> from __future__ import division
>>> (10 - 20) / (100 - 10)
-0.1111111111111111