私はxlrd
、Excelスプレッドシートから値を取得し、それらを使用してさまざまなことを行うために使用するPythonスクリプトを維持しています。スプレッドシートの一部のセルは高精度の数値であり、そのままにしておく必要があります。これらのセルの1つの値を取得すると、xlrd
0.38288746115497402float
などが表示されます。
ただし、コードの後半でこの値を文字列に取り込む必要があります。str(value)
またはを実行すると、「 0.382887461155 unicode(value)
」のようなものが返されます。要件は、これは受け入れられないと言っています。精度を維持する必要があります。
私はこれまでにいくつかのことを試しましたが、成功しませんでした。1つ目は、文字列の書式設定を使用することでした。
data = "%.40s" % (value)
data2 = "%.40r" % (value)
ただし、どちらも同じ丸められた数値「0.382887461155」を生成します。
SOやインターネット上の他の場所で同様の問題を抱えている人々を探し回ったとき、一般的な提案はDecimal
クラスを使用することでした。しかし、データが私に与えられる方法を変更することはできません(誰かがxlrd
小数を返す秘密の方法を知っていない限り)。そして、私がこれをやろうとすると:
data = Decimal(value)
しかし、TypeError: Cannot convert float to Decimal. First convert the float to a string.
明らかに文字列に変換できません。そうしないと、精度が低下します。
そうそう、私はどんな提案にもオープンです-必要ならば本当にひどい/ハッキーなものでさえ。私はPython(私自身はJava / C#の人の方が多い)の経験があまりないので、ここで何らかの根本的な誤解がある場合は、遠慮なく訂正してください。
編集:Python2.6.4を使用していることを追加しようと思っただけです。バージョンの変更を妨げる正式な要件はないと思います。他のコードを台無しにする必要はありません。