2017-11-13 18 views
-3

これは私を怒らせる...私がパイソンを使用してきたすべての年のうちに、これは今それ自体を提示し始めています。私が今までそれをかわすことができたのは私の外でした。数学と振る舞いと浮動小数点との比較

あなたはPythonのアイドルを開いて、この式をしようとすると...

4/32*100 

あなたが買ってあげる「0」答えとして。浮動小数点数を使って同じ式を試してみてください。

4.0/32.0*100.0 (or just the first number 4.0/32*100) 

これで実際のパーセンテージが得られました。

WTF !?

これはPythonエラーですか?計算しても方程式を実行し、パーセンテージを吐き出すことができます。

なぜ、Pythonでは4が4.0と表示されないのですか?より良い質問... 4(4.0)が見えない場合、通訳は実際に何を見ていますか?

誰かがこれをクリアして、私が再びpythonでプロフェッショナルに感じることができるようにしてください(笑)。

+0

のように動作させるには、以下のやってあなたは4/32を分割して、100を掛けしようとしていますか?もしそうなら、カントは反復する。 – pstatix

+2

Python 2を使用していますか?その場合は、https://stackoverflow.com/questions/10768724/why-does-python-return-0-for-simple-division-calculationを参照してください。 TL; DR - 整数除算は、1未満の値を0に丸めます。 –

+0

Python 3.6を使用して正常に動作します。 – davo36

答えて

0

Pythonの3.xの、「/」true」にしすべてのタイプについて「除算」を行います。

pythonが真の除算を実行するようにするには、分子の分母のいずれかをfloatにキャストします。

float(4)/32*100 

または

4/float(32)*100 

やPython 2部門は、Python 3部門

from __future__ import division 
4/32*100 
2

Python 2では、intディビジョンの小数値を無視します。

たとえば、1/2 = 0.5ですが、intタイプの除算では、小数点の値を無視するため1/2が評価されます。我々が期待するよう

したがって、4/32*100とあなたのケースでは、4/32は、最初の0と評価され、その後、0*100が最終的にfloat型除算では、一方0

に等しくなり、それは(答えをない評価します厳密には正確な定義では、詳細はhereを参照してください)。二つの整数またはlong型を分割する(分割後の床関数を適用する)も、「フロア分割」として知られる整数除算を使用してPythonの2.xの

関連する問題