BigDecimalの作業中に遭遇したピットの解決


BigDecimal精度で遭遇したピット
  • 作業中に発生した問題
  • BigDecimal失精の原因
  • 解決策
  • 仕事上の問題
    初心者として、初めて同僚に勧められたBigDecimalというパッケージ類を使ったとき、多くの問題に遭遇し、BigDecimalを使ったとき、doubleを回して演算をしたのを覚えていますが、結局失精しました.これは編集者が使い始めたときに出会った愚かな問題です.笑わないでほしいです.その後、ゆっくりテストして資料を見てみると、BigDecimalの演算方法は精巧ではありません.みんなが仕事をしている間にBigDecimalを使って演算することができます.
    BigDecimalの失精の原因
  • BigDecimalは、初期化時にdoubleを使用してのみ初期化され、失精を招く可能性があります.
  • doubleに変換して計算する
  • がdouble表示に移行すると、doubleが時間
  • を表すのに適していないため、不精が発生する場合があります.
    解決策
    みんなが使うときはBigDecimalを使うことができます.valueOf()メソッド、またはnew BigDecimal(「0.1」)を使用します.
    	public static BigDecimal valueOf(double val) {
    		//   BigDecimal     ,         ,    String             .
            // Reminder: a zero double returns '0.0', so we cannot fastpath
            // to use the constant ZERO.  This might be important enough to
            // justify a factory approach, a cache, or a few private
            // constants, later.
            return new BigDecimal(Double.toString(val));
        }
    

    そこで、編集者はnew BigDecimal(「0.1」)を使用することをお勧めします.初期化、またはBigDecimalを使用する.valueOf(0.1);いいですよ.
    doubleとfloatは使用できません.なぜならdoubleとfloatは小数を表すものではないからだ.
    公式解釈:floatとdoubleタイプは主に科学計算と工程計算のために設計され、彼らはバイナリ浮動小数点演算を実行し、これは広範な数値範囲でより正確な高速近似と計算を提供するために丹念に設計されているが、彼らは完全に正確な結果を提供していないので、正確な結果の場合に使用されるべきではない.
    古いバージョンの項目が反復した場合、表示する時にBigDecimalを回し、計算する時にBigDecimalの方法で計算するしかない.
    注:編集者もBigDecimalを勉強している間に問題に遭遇したことをまとめています.編集者はBigDecimalと精度の学習を引き続き深く理解する.後でこの方面の内容を更新し続けるかもしれません.