1

xlrdxlsファイルからデータを取得するために使用するPythonスクリプトを開発しています。ただし、Excelファイルと同じ精度で浮動小数点数を印刷する方法がわかりません。

https://stackoverflow.com/a/3481575/1296490で提案されているようにreprを使用してみましたが、それでも私が望むものとは異なる精度が得られます。

たとえば、Excelファイルには値を持つセルがあり、returns-1.62717010683527を使用すると、 が戻ります。 農産物を使用する
str(worksheet.cell(i,j).value)-1.62717010684
repr( worksheet.cell(i,j).value)-1.6271701068352695
str(Decimal(worksheet.cell(i,j).value))-1.6271701068352695095187044671547482721507549285888671875

上記のどれも私にExcelからの元の値を与えません。ドットの後の桁数が異なる多くの数字を処理する必要があり、使用%.10fなどには適していません。

4

4 に答える 4

4

Excelの精度は、有効数字15桁に制限されています。

目的を達成するために使用str( "%0.15g" % cell.value )します

。g - Same as "e" if exponent is greater than -4 or less than precision, "f" otherwise.
http://docs.python.org/release/2.4.4/lib/typesseq-strings.html

を忘れない0.でください"%0.15"

于 2012-03-28T13:27:23.537 に答える
2

Excel は、計算に IEEE 標準の 64 ビット浮動小数点を使用します。ただし、精度が 15 桁の 10 進浮動小数点を使用しているふりをしようとして、ぐるぐる回っています。

「Excel の元の値」は非常に曖昧な概念です。あなたは、Excel が表示するものを欲しがっているようです。これは、ファイルに入れるものではありません。ファイルに入れるのは、IEEE 標準の 64 ビット 2 進浮動小数点値です。

xlrd はその値を正確に取得します。

Python の repr は、取得可能な方法で、その値の正確な文字列表現を提供します ...float(repr(value)) == value絶対に保証されています。

を使用するstr(value)と精度が失われます。

有効桁数が 17 桁を超える decimal.Decimal を使用しても意味がありません。

于 2012-03-29T20:13:23.587 に答える
0

浮動小数点値だけでは、Python(または他のプログラム)は目的の表示精度を決定できないため、最初に、表示する場所の数を確認する必要があります。たとえば、Excelの数値形式の文字列(おそらく '0.00000'-> 5)を解析します。小数位 )

数値形式を取得するための開始点は、 http: //groups.google.com/group/python-excel/browse_thread/thread/2d07febfa031dfa5です。

表示する場所の数を決定したら、2つの引数形式の文字列形式を使用できます

value = -1.6271701068352695   # value stored ( not displayed ) in excel
precision = 5    # to be found out from excel number format
print '%.*f' % (precision, value)

残念ながら、任意のExcel形式にフォーマットするのは難しいため、フォーマットが0.0000 .... 0よりも複雑な場合は、フォーマッターを最初から作成する必要があります。

于 2012-03-27T21:37:11.833 に答える
0

私はコードへのリンクで答えました(Excelのように数値形式を使用して数値を文字列に変換します): https://stackoverflow.com/a/19661081/327725

于 2013-10-29T14:32:14.013 に答える