質問

Javaを使用し、" double"を参照しています。データ・タイプ。 短くするために、コードでdoubleとして読み取る標準入力からいくつかの値を読み取ります(BigIntegerのようなものを使用したいのですが、現在は不可能です)。

ユーザーから二重値を取得することを期待していますが、次のようなものを入力する場合があります。 999999999999999999999999999.9999999999 これはdoubleの正確な表現を超えており、1.0E27に丸められると思われます(おそらく)。

特定の値をdoubleで正確に表すことができず、丸めが必要かどうかを検出する方法についてのポインターを取得したい(その値または他のそのようなアクションを拒否できるように)。

ありがとうございます

役に立ちましたか?

解決

人間が入力したほとんどの値は、doubleで正確に表現できません。

たとえば、ユーザーが0.1を入力できないようにしますか?これは、doubleとして正確には表現できません。

エラーの規模を見つけるには、次のようなことができます:

BigDecimal userAsDecimal = new BigDecimal(userInput);
double userAsDouble = double.parseDouble(userInput);
BigDecimal doubleToDecimal = new BigDecimal(userAsDouble);
BigDecimal error = userAsDecimal.subtract(userAsDouble).abs();

"エラー"許容できるほど小さい。

他のヒント

double orig = GetSomeDouble();
double test1 = orig - 1;
if ( orig == test1 )
   SomethingIsWrong();
double test2 = test1 + 1;
if ( orig != test2 )
   SomethingIsWrong();

doubleを使用して、求めている方法で何かを正確に保存することはできません。ユーザーがdoubleが完全に表現できる数字を入力することはほとんどありませんが、それは偶然の一致です。正確な番号を保存する必要がある場合は、操作を行う必要がない限り、文字列を使用できます。それ以上必要な場合は、おそらくその種の正確な数学用に作成されたライブラリがあります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top