小数点以下の桁数の精度が必要なため、Decimalクラスを使用するコードに依存しています。一部の関数では、コードベースの他の部分とのインターフェイス方法により、入力を浮動小数点にすることができます。それらを10進オブジェクトに変換するには、次のようなものを使用します。
mydec = decimal.Decimal(str(x))
ここで、xは入力として使用されるフロートです。私の質問は、floatに適用される「str」メソッドの標準が何であるかを誰かが知っていますか?
たとえば、番号2.1234512を考えてみましょう。フロートの表現方法のため、内部では2.12345119999999999として格納されます。
>>> x = 2.12345119999999999
>>> x
2.1234511999999999
>>> str(x)
'2.1234512'
この場合、str(x)は'%.6f'%xのようなことをしています。これは、私のコードが小数に変換される方法の問題です。次のようにします。
>>> d = decimal.Decimal('2.12345119999999999')
>>> ds = decimal.Decimal(str(2.12345119999999999))
>>> d - ds
Decimal('-1E-17')
したがって、float 2.12345119999999999があり、それをDecimalに渡したい場合、str()を使用して文字列に変換すると、間違った答えが返されます。このエラーを回避するためにこのコードを書き直す必要があるかどうかを判断する必要があるため、フォーマットを決定するstr(x)のルールを知る必要があります(たとえば、decimalオブジェクトがあると、コードは小数点以下10桁に丸められる場合があります)
うまくいけば、ここの誰かが私を指し示すことができるように、Pythonのドキュメントにいくつかのルールのセットが必要です。ありがとう!