59

私のアプリケーションでは、次のことに遭遇し、その結果に驚いていました。

8/-7=-2(両方の整数)。

これは何を意味するのでしょうか?

4

5 に答える 5

56

実際の値、つまり8.0/(-7.0)、の場合、結果はおおよそ-1.143です。

整数除算を使用した結果は、より負の値に切り捨てられます-2。(これは「フロア分割」とも呼ばれます)

これが、次のやや複雑な答えが得られる理由です。

>>> 8/(-7)
-2
>>> 8/7
1

注:これはPython 3で「修正」されており、結果は8/(-7)になります-1.143。したがって、Python 2を使用する理由がない場合は、アップグレードする必要があります。;)

Python 3では、整数除算が必要な場合は、//演算子を使用できます。これにより、Python2の場合と同じ答えが得られます8/(-7)

このテーマに関するPython拡張提案は次のとおりです。PEP238-除算演算子の変更

于 2011-04-04T06:29:16.953 に答える
22

Pythonは常に、負の数の除算と正の数の除算の両方に対して「フロア除算」を実行します。

あれは

1/10 = 0
1/-10 = -1

しかし、いつか1/-10を0にする必要があります

最初にfloat除算を使用してから、結果をintにキャストすることで実行できることがわかります。たとえば、

int(float(1)/-10) = 0

これは私にとっては問題なく機能します。将来の部門をインポートしたり、Python3にアップグレードしたりする必要はありません。

お役に立てば幸いです〜

于 2015-07-20T06:35:30.313 に答える
9

Pythonで整数除算をfloatに自動的に変換するには、次を使用できます。

from __future__ import division

今:

8/-7=-1.1428571428571428

この機能は、整数除算に依存していた既存のコードを壊さないように、標準のPython2にはありません。

ただし、これはPython3のデフォルトの動作です。

于 2011-04-04T06:35:27.683 に答える
4

Pythonを分割するときに両方の値が整数の場合、フロア分割を使用します。

于 2011-04-04T06:29:49.220 に答える
0

Pythonでは、/演算子は整数除算用です。フロート除算とそれに続くfloor演算として見ることができます。

例えば、

8/7 ==フロア(8.0 / 7.0)== 1

8 / -7 ==フロア(8.0 / -7.0)== -2

于 2011-04-04T06:31:57.320 に答える