50

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

-3、65、9、17、1の番号のテキストファイルがあるとします。それぞれを読み、floatに変換して、リストに追加します。Python 2では、を呼び出すとfloat(-3.65)が返されます-3.65。ただし、Python 3では、float(-3.65) returns-3.6499999999999999`で精度が低下します。

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

4

5 に答える 5

73

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

Python3には簡単な答えがあります。

>>> 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'

いつものように、float値は概算です。

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

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

数値自体を正確に小数点以下2桁の精度で格納する必要がある場合は、10進数タイプを使用することをお勧めします。興味のある方のために、浮動小数点の精度についてもっと読んでください。

于 2017-03-29T03:01:53.323 に答える
53

これを行う簡単な方法は、丸いブイットインを使用することです。

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

于 2013-10-30T00:47:30.947 に答える
27

一言で言えば、あなたはできません。

3.65として正確に表すことはできませんfloat。あなたが得ている数3.65は、正確なfloat表現を持っているそれに最も近い数です。

(古い?)Python 2と3の違いは、純粋にデフォルトのフォーマットによるものです。

Python2.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

于 2013-01-26T18:34:18.777 に答える
8

これを試して:

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)
于 2018-04-26T08:13:42.473 に答える
4

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

これがお役に立てば幸いです。

于 2017-10-26T01:15:37.667 に答える