私は浮動小数点数で、すべて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()
の代わりに小数点/精度を設定する必要があります。
一言で言えば、できません。
3.65
をfloat
として正確に表すことはできません。取得する数値は、正確な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
を参照してください。
これを行う簡単な方法は、組み込みのラウンドを使用することです。
round(2.6463636263,2)
は2.65
として表示されます。
コメントでは、目的は小数点以下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進数 タイプを使用することをお勧めします。 浮動小数点精度の詳細な読み取り値 興味のある人向け。
これを試して:
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)
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
これがあなたを助けることを願っています!