2017-02-20 9 views
-1

netCDF Pythonライブラリを使用してnetCDF変数を読み込み、リスト(変数)は画像(PyCharm IDEを使用)と同じ10進精度を返します。しかし、要素を変数index(変数[0]など)で取得しようとすると、丸め値(5449865.55794など)が返されますが、5449865.55793999997が必要です。私は正しい小数精度でこのリストを反復処理するにはどうすればよいPythonは小数点以下の精度でリストを反復する

enter image description here

いくつかの基本的なコード

from netCDF4 import Dataset 
nc_dataset = Dataset(self.get_file().get_filepath(), "r") 
variable_name = "E" 
// netCDF file contains few variables (axis dimensions) 
variable = nc_dataset.variables[variable_name] 
variable is not a list but a netCDF object, however when using list() or variable[index] will return element value of the axis dimension. 
+1

私は[mcve]をお願いします –

+0

コードJeanを更新しましたが、このnetCDFライブラリではわかりません。 –

+0

'decimal'モジュール –

答えて

1

小数は偽です。違いは、画面上に表示される数字の違いだけで、コンピュータに保存されている数字の違いではありません。

我々は文字通りそれらを取るとしたら

a = 5449865.55793999997 
a 
# prints 5449865.55794 

二つの数の違いを自分自身を納得させるために、次の試してみてくださいは、3×10^-11です。 aのサイズでの64ビット浮動小数点変数の最小の差は、大きさのオーダーよりも大きくなります。だからあなたのコンピュータはこれらの2つの10進数を区別することができません。

しかし、明るい面を見てください。あなたのデータは、神秘的なプロセスによって壊されることはありません。

+0

実際には正確な精度を得るためには、このようにすることができます tmp =' {} '。 (変数[:] .stat(numpy.dtype(decimal.Decimal))) 配列の文字列を返し、解析して値を取得します。 –

0

・ホープこれはあなたのニーズに合ったものです:あなたが追いかけている

import decimal 

print decimal.Decimal('5449865.55793999997') 
+0

ありがとうございますが、問題は私が要素の値を取得したときです:変数[0]はすでに5449865.55794を返し、次にあなたの例のようにdecimal()を使用できません。 –

+0

それを 'decimal'オブジェクトのリストとして割り当てます。 'data_list = [変数内のnumのdecimal.Decimal(num)]' data_list = list(variable) 'の代わりに –

関連する問題