Java中double相减为什么会出现不精确的现象?
高洛峰
高洛峰 2017-04-17 17:46:37
0
5
822

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

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(5)
阿神

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

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

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

いいねを押す +0
迷茫

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

いいねを押す +0
巴扎黑

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

いいねを押す +0
迷茫

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

いいねを押す +0
伊谢尔伦

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

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

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

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

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

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート