(オリジナル)自分の書いたいくつかの工具類(四)Big Decimalを共有して正確に計算する。
12178 ワード
javaのfloatは科学的な計算あるいは工程の計算を行うことしかできません。
ほとんどの商業計算では、java.math.BigDecimal類を用いて正確な計算を行います。
たとえば、私たちは普段よく使うお支払いの宝と滴滴タクシーを使っています。もし模擬計算をするなら、
このクラスを使わなければなりません。
BigDecimalの使用手順は以下の通りである。
1 BigDecimalオブジェクトを初期化します。
この二つの方法はどちらでもいいです。
今すぐBigDecimalの演算ツールの種類をカプセル化します。今度直接呼び出してもいいです。
具体的なコードは以下の通りです。
ほとんどの商業計算では、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();
}
}