ホームページ  >  に質問  >  本文

Java中double相减为什么会出现不精确的现象?

double s = 5.3;
double s1 = 4.2;
System.out.println(s-s1);
输出1.0999999999999996

高洛峰高洛峰2713日前762

全員に返信(5)返信します

  • 阿神

    阿神2017-04-17 17:48:37

    Java の基本データ型の float 型と double 型の本質は浮動小数点数です。この場合、浮動小数点数を計算すると、計算結果は正確な値になりません。

    したがって、Java はクラス BigDecimal を提供します。正確なデータ操作 (金額など) を実行する必要がある場合は、このクラスを使用して国を救うことができます...

    浮動小数点数の基本的な実装と原則については、计算机原理 などのコースでよく説明されています。関連する情報は自分で見つけることができます...

    返事
    0
  • 迷茫

    迷茫2017-04-17 17:48:37

    Java で BigDecimal を使用して浮動小数点数を正確に計算する<🎜​​>

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:48:37

    ご招待いただきありがとうございます!精度が失われる理由は説明できませんが、解決方法はわかっています。計算前に double などの型を String に変換し、それを java.math.BigDecimal に入れて計算することをお勧めします。 math.BigDecimal には、add() や pide() などの独自の操作メソッドが付属しています。 。計算後に BigDecimal オブジェクトが返され、doubleValue()、intValue()、その他のメソッドを使用して基本データ型に変換されます。

    返事
    0
  • 迷茫

    迷茫2017-04-17 17:48:37

    ご招待ありがとうございます。この質問については、この記事を参照してください https://zm8.sm-tc.cn/?src=http%3A%2F%2Fz...

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:48:37

    コンピューターの演算は二進法だからです。

    10 進数の 0.1 を 2 進数に変換すると、無限に繰り返される 10 進数になるため、切り捨てる必要があります。

    10 進数の通貨の加算と減算では、切り捨てエラーを避けるために BigDecimal 型 (一部の言語では Decimal と呼ばれます) を使用できます。

    MATLAB と同様に、数値クラスを自分で定義することもできます。

    エラーとエラーは別のものです。ほとんどの場合、最後の違いは問題ではありません。

    例: 倍精度浮動小数点数を使用して地球の円周を計算すると、切り捨て誤差は 0.000001 mm 程度になります。

    返事
    0
  • キャンセル返事