(オリジナル)自分の書いたいくつかの工具類(四)Big Decimalを共有して正確に計算する。

12178 ワード

javaのfloatは科学的な計算あるいは工程の計算を行うことしかできません。
ほとんどの商業計算では、java.math.BigDecimal類を用いて正確な計算を行います。
たとえば、私たちは普段よく使うお支払いの宝と滴滴タクシーを使っています。もし模擬計算をするなら、
このクラスを使わなければなりません。
BigDecimalの使用手順は以下の通りである。
1 BigDecimalオブジェクトを初期化します。
この二つの方法はどちらでもいいです。
BigDecimal bd1 = new BigDecimal(Double.toString(0.123));
BigDecimal bd2 = BigDecimal.valueOf(0.123);
2具体的な演算方法は以下の通りである。
1 public BigDecimal add(BigDecimal value);                        //  
2 public BigDecimal subtract(BigDecimal value);                   //   
3 public BigDecimal multiply(BigDecimal value);                   //  
4 public BigDecimal divide(BigDecimal value);                     //  
計算が終わったら、BigDecimalオブジェクトを対応する基本データタイプの変数に変換する必要があるなら、float Value()、double Value()などの方法が使えます。
今すぐBigDecimalの演算ツールの種類をカプセル化します。今度直接呼び出してもいいです。
具体的なコードは以下の通りです。
/**  * Created by     on 2017/4/18 0018.  */ public class BigDecimalUtil {
    /**  *          add    * @param value1      * @param value2     * @return         */  public static double add(double value1,double value2){
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.add(b2).doubleValue();
    }

    /**  *          sub    * @param value1      * @param value2     * @return         */  public static double sub(double value1,double value2){
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.subtract(b2).doubleValue();
    }

    /**  *          mul    * @param value1      * @param value2     * @return         */  public static double mul(double value1,double value2){
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.multiply(b2).doubleValue();
    }

    /**  *            div  * @param value1      * @param value2     * @param scale       * @return         * @throws IllegalAccessException  */  public static double div(double value1,double value2,int scale) throws IllegalAccessException{
        //        0        if(scale<0){
            throw new IllegalAccessException("       0");
        }
        BigDecimal b1 = new BigDecimal(Double.valueOf(value1));
        BigDecimal b2 = new BigDecimal(Double.valueOf(value2));
        return b1.divide(b2, scale).doubleValue();
    }
}