0

StringTokenizer クラスを使用してテキスト ファイルを読み取ります。テキスト ファイルには、2 つの double 値があります。

interest = Double.parseDouble(aString.nextToken());
System.out.println(interest);

コンソールには問題なく表示されますが、後で印刷しようとすると、

System.out.println("Fixed Daily Interest = " + customers[i].get_interest() + "\n");

精度は常に小数点で失われます。たとえば、値の 1 つが 0.055 の場合、コードの最初の部分で解析した後に出力すると、コンソールとまったく同じように表示されます。ただし、別の方法では、出力しようとすると、何を試しても、ダブル変数として解析せず、DecimalFormat を使用するなどして、0.05 が得られます。私はここで本当に困惑しています。

4

2 に答える 2

1

DecimalFormatを使用して、Java で精度を取得できます。

これについてもう少し読むと、この投稿が見つかりました。基本的に、より精度が必要な場合は、これを処理する特別に設計されたクラスに移行する必要があります。投稿にはいくつかのオプションがリストされています。

于 2011-03-21T22:27:32.353 に答える
0

BigDecimalさらに精度が必要な場合は、使用してみてください。問題が double 値の読み取りであり、出力が異なる値を出力する場合は、2 進数 <-> 10 進数表現の問題を思い出してください。一部の 10 進数は、バイナリ精度が制限されているバイナリ形式で表すことができません。また、数値を操作する場合、結果が 10 進数の 5 ではなく 4,99997 として出力されることがあります。問題は、この数値を 2 進数で表現することにあります。

数値が変更されていないことを確認してください。toString()または を直接使用する場合、印刷の出力は常に同じでなければなりませんSystem.out.println("" + number);

于 2011-03-22T00:39:18.297 に答える