3

重複の可能性:
浮動小数点の不正確な例

Java でモジュロ演算子を使用すると、期待する数値が得られません。

私がやっていることは次のとおりです。

double input = 5.59;
System.out.println("Output: " + (input % 2));

結果として 1.59 が表示されることを期待していますが、1.5899999999999999 が出力されています。これがなぜであるかについての手がかりはありますか?

4

2 に答える 2

5

これは浮動小数点の不正確さから来ています。これは、何が起こっているのかを正確に説明する素晴らしい SO 回答です。

数値を丸めたい場合は、次のような書式設定を使用する必要があります。

double input = 5.59;
System.out.format("Output: %.2f%n", (input % 2));
  • 「%」は、最初の数値引数で自分自身を置き換えるようフォーマッタに指示します。これらはいくつでも追加できます。
  • ".2" は、小数点以下 2 桁で数値をフォーマットするようにフォーマッターに指示します。
  • 「f」は、それが浮動小数点数であることをフォーマッタに伝えるだけです。
  • 「%n」は、アプリケーションを実行しているプラ​​ットフォームに適した改行文字です。「\n」ではなく、常に「%n」を使用する必要があります。

ここに、これらすべてに関する優れたドキュメントがあります。

お役に立てれば!

于 2012-10-09T17:40:39.180 に答える
1

Doubleの精度のためです。目的の出力を実現するには、フォーマットする必要があります。

double input = 5.59;
System.out.println("Output: " + new DecimalFormat("00.00").format(input % 2));

Output: 1.59 と表示されます。

于 2012-10-09T17:46:57.967 に答える