0

こんにちは、少し変わった質問があります。数値のリスト (物理的な測定値を表す) を変換しています。それぞれの数値は、元の研究に応じて、任意の単位で指定された精度で報告されます。これが私が意味することの例です:

[...,105.0,20.0,3.5,4.25,9.78,7.2,7.2] 

これらはもちろんタイプです:

<type 'numpy.float64'>.

たとえば、最後の番号を出力すると、次のようになります。

print list[-1]
>>> 7.2

ただし、この方法でアクセスすると、次のようになります。

7.2000000000000002

float はデフォルトで 64 ビットであることを理解しています。したがって、float を使用して計算を行う (つまり、この測定値のリストを変換する) と、64 ビットの変換値が返されます。変換された値の例を次に示します。

[105.27878958,20.0281600192,3.47317185649,4.27596751688,9.82706595042,7.27448290596,7.26291009446]

どちらの方法 (print を使用するかどうかに関係なく) にアクセスすると、64 ビットの数値が返されます。しかし、明らかに何か他のことが起こっています。そうしないと、印刷関数は実際の測定値を表示する方法を本当に知りません。元の測定値と同じレベルの精度に変換された値を報告したいと思います。Pythonでこれを行う方法はありますか?

4

1 に答える 1

6

次の 3 つの問題があります。

1) 入力の小数点以下の桁数を確認するにはどうすればよいですか?

あなたの Python コードが文字通り と言っているなら[...,105.0,20.0,3.5,4.25,9.78,7.2,7.2]、あなたは運が悪いです。必要な情報はすでに失われています。

代わりに、ある種の入力文字列として数値のリストがある場合は、必要な情報が得られます。おそらく、次のようなコードがすでにあるでしょう。

for line in input_file:
    data = [float(x) for x in line.split(',')]

float に変換するに、小数点以下の桁数を記録する必要があります。次に例を示します。

for line in input_file:
    places = [len(x.partition('.')[2]) for x in line.split(',')]
    data = [float(x) for x in line.split(',')]

2) その情報をどのように保存しますか?

それはあなた次第です。申し訳ありませんが、プログラム全体を表示しないと、その問題を解決することはできません。

3)出力をその小数点以下の桁数に丸めるにはどうすればよいですか?

%次のように、演算子または -{}スタイルの書式設定を使用します。

print '%.*f' % (places[i], data[i]) 
于 2014-05-20T01:31:58.393 に答える