web-dev-qa-db-ja.com

Python 3 Float Decimal Points / Precision

私は浮動小数点数で、すべて1か2の小数点を持つテキストファイルを読んでいます。 float()を使用して行をフロートに変換し、それが失敗した場合はValueErrorを上げています。すべてのフロートをリストに保存しています。印刷するとき、小数点以下2桁の浮動小数点として印刷したいと思います。

-3、65、9、17、1という数字のテキストファイルがあるとします。各ファイルを読み、それらを浮動小数点数に変換し、リストに追加します。ここでPython 2、float(-3.65)を呼び出すと_-3.65_が返されます。Python 3、ただしfloat(-3.65) returns -3.6499999999999999`は精度を失います。

小数点以下2桁のみの浮動小数点数リスト_[-3.6499999999999999, 9.1699999999999999, 1.0]_を出力したい。 '%.1f' % round(n, 1)の行に沿って何かをすると、文字列が返されます。文字列ではなく、浮動小数点の2つの小数点すべてのリストを返すにはどうすればよいですか?これまでのところ、[round(num, 2) for num in list]を使用して丸めましたが、round()の代わりに小数点/精度を設定する必要があります。

31
darksky

一言で言えば、できません。

3.65floatとして正確に表すことはできません。取得する数値は、正確なfloat表現を持つ3.65に最も近い数値です。

(古い?)Python 2と3の違いは、純粋にデフォルトの書式設定によるものです。

Python 2.7.3および3.3.0:

In [1]: 3.65
Out[1]: 3.65

In [2]: '%.20f' % 3.65
Out[2]: '3.64999999999999991118'

正確な10進数データ型については、 decimal.Decimal を参照してください。

24
NPE

これを行う簡単な方法は、組み込みのラウンドを使用することです。

round(2.6463636263,2)2.65として表示されます。

37
slurry

コメントでは、目的は小数点以下2桁で印刷することであると述べています

Python 3:

>>> num=3.65
>>> "The number is {:.2f}".format(num)
'The number is 3.65'

または同等のf-strings(Python 3.6+):

>>> num = 3.65
>>> f"The number is {num:.2f}"
'The number is 3.65'

いつものように、フロート値は近似値です。

>>> "{}".format(f)
'3.65'
>>> "{:.10f}".format(f)
'3.6500000000'
>>> "{:.20f}".format(f)
'3.64999999999999991118'

ほとんどのユースケースでは、floatを使用して、特定の精度でprintのみを使用する必要があると思います。

数字自体を正確に2桁の10進数で保存したい場合は、 10進数 タイプを使用することをお勧めします。 浮動小数点精度の詳細な読み取り値 興味のある人向け。

31
Andrew E

これを試して:

num = input("Please input your number: ")

num = float("%0.2f" % (num))

print(num)

これはもっと簡単だと思います。小数点以下1桁の場合は、%0.1fを使用します。小数点以下2桁の場合は、%0.2fなどを使用します。

または、すべてを2行に減らしたい場合:

num = float("%0.2f" % (float(input("Please input your number: "))))
print(num)
5
S.Ahmed

Python3を使用して、以下の関数を理解してください

def floating_decimals(f_val, dec):
    prc = "{:."+str(dec)+"f}" #first cast decimal as str
    print(prc) #str format output is {:.3f}
    return prc.format(f_val)


print(floating_decimals(50.54187236456456564, 3))

出力は50.542

これがあなたを助けることを願っています!

2
ArifMustafa