12

本当にシュールな体験で、20 秒かかると思っていたタスクに 20 分を費やしました。

3桁以上の小数を使いたいです。1位以上は取れませんし、その場合でもナンセンスです。

たとえば、または1/3以外のものとして表示できません。00.0

グーグルは私をDecimalに導きましたが、Decimal役に立ちませんでした。

1/3この拷問を終わらせて、 として現れるために私がしなければならないことを教えてください.333!

編集それを片付けてくれてありがとう!どうやらコンピューター科学者は、数学者を混乱させイライラさせるために、整数除算と呼ばれるものを発明したようです。私の混乱を解消するのに十分親切にしていただきありがとうございます。

4

5 に答える 5

21

Python 2 では、1/3両方のオペランドが整数であるため、整数除算を行います。float 除算を行う必要があります。

1.0/3.0

または:

from __future__ import division

これにより/、実数の除算と//整数の除算が行われます。これは Python 3 以降のデフォルトです。

于 2012-07-15T00:47:50.667 に答える
7

2 つの整数を除算すると、切り捨てられた整数の結果が得られます (つまり、結果の小数部分は破棄されます)。これが理由です。

 1 / 3

あなたにあげる:

 0

この問題を回避するには、オペランドの少なくとも1 つを float にする必要があります。たとえば、1.0 / 3または1 / 3.0または(もちろん)1.0 / 3.0整数の切り捨てを回避します。ちなみに、この動作は Python に固有のものではありません。

(編集: @Ivc による以下の有益なコメントで言及されているように、整数オペランドの 1 つがの場合、代わりに結果がfloor()されます。この理由については、この記事を参照してください)。

また、数値の内部表現と外部表現について混乱が生じる可能性があります。数字はそれが何であるかですが、それがどのように表示されるかを判断できます。

書式設定命令を使用して、外部表現を制御できます。たとえば、数値は次のように小数点以下 5 桁で表示できます。

n = 1/3.0

print '%.5f' %n
0.33333

小数点以下15桁を取得します。

print '%.15f' %n
0.333333333333333

.format()最後に、関数を使用して文字列/数値をフォーマットする「新しく改良された」方法があり%ます。例は次のとおりです。

print 'the number is {:.2}'.format(1.0/3.0)

あなたに与えるでしょう:

the number is 0.33
于 2012-07-15T00:48:29.603 に答える
2

あなたの値は浮動小数点である必要があります

In [1]: 1/3
Out[1]: 0

In [2]: 1/3.0
Out[2]: 0.33333333333333331

また

In [1]: from __future__ import division

In [2]: 1/3
Out[2]: 0.33333333333333331
于 2012-07-15T00:48:08.457 に答える
2

Python2 では、少なくとも 1 つのオペランドを浮動小数点数として指定する必要があります。round()小数点以下 3 桁だけを取得するには、次のメソッドを使用できます。

>>> a = 1.0 / 3
>>> round(a, 3)
0.333

Python3 では、デフォルトで整数除算を実行しないようです。

>>> a = 1/3
>>> round(a, 3)
0.333
于 2012-07-15T00:52:06.583 に答える
1

10 進数を使用します。ドットの後ろに 100 桁を取得できます。

from decimal import *
getcontext().prec = 100
Decimal(1)/Decimal(3)
于 2015-04-06T10:27:58.800 に答える