1

丸めエラー (と思われるもの) に問題があります。

0.686357E-01double に変換しようとしている文字列 があります。関数を使用して分割することができましたPattern.split()。基数と指数の値をうまくキャプチャしています。ただし、それらを適切に乗算しようとすると、結果として次のようになります0.06863570000000001

関連するコードは次のとおりです。

pattern = Pattern.compile("E\\+?");
String[] number = pattern.split(string);

double base = Double.parseDouble(number[0]);
int exponent = Integer.parseInt(number[1]);

number= base*Math.pow(10, exponent);

では、丸め誤差を回避するにはどうすればよいでしょうか。(回避できる方法はありますが、可能であれば対処法を教えていただきたいです)

ありがとう。

4

4 に答える 4

6

あなたはそれを分割する必要はありません、Double.parseDoubleそれらの種類の数をうまく扱うことができます。

double number = Double.parseDouble("0.686357E-01");

見る?できます!

于 2012-07-03T21:29:40.423 に答える
6

0.0686357 は、倍精度値として正確に表現できません。

2 つのソリューション:

  • などを使用しBigDecimalます。
  • 人間が読める形式に戻す場合、表示精度を特定の有効数字に制限します。
于 2012-07-03T21:27:29.007 に答える
1

浮動小数点数の精度は完全ではありません。それが問題になる場合は、BigDecimalを使用してください。

String string = "0.686357E-01";
BigDecimal number = new BigDecimal(string);
System.out.println(number);
于 2012-07-03T21:27:31.830 に答える
0

Double常にそのように出力されますが、値は正しいままです。正しい値を取得するには、出力をフォーマットする必要があります。DecimalFormatクラスを参照してください。

于 2012-07-03T21:35:38.970 に答える