BigDecimal加減乗除+比較サイズ

4207 ワード

1.BigDecimal比較サイズ
BigDecimal a = new BigDecimal("1.00");
BigDecmial b = new BigDecimal(1);
a b , equals
System.out.println(a.equals(b));
:false
:BigDecimal , , ?
if(a.compareTo(b)==0) true
a.compareTo(b)
-1 0 1

2.BigDecimal加減乗除
10,000を除いて6桁の小数を保持
if(null!=record.getString("GD_XQ_SBDL")){     yd.setGdXqSbdlX(new BigDecimal(record.getString("GD_XQ_SBDL")).divide(new BigDecimal(10000), 6, RoundingMode.HALF_UP));
    }
10,000
list.get(i).setGdXqSbdl(list.get(i).getGdXqSbdlX().multiply(new BigDecimal(10000)));
java.math.BigDecimal.BigDecimalには4つの方法があります.まず、その中の2つの使い方を見てみましょう.
1つ目:BigDecimal(double val)Translates a double into a BigDecimal.
第二種類:BigDecimal(String val)Translates the String repre sentation of a BigDecimal into a BigDecimal.
BigDecimalを使用してStringで十分に作成するには、加算を行うには、まず2つの浮動小数点数をStringに変換し、BigDecimalを作成し、そのうちの1つにaddメソッドを呼び出し、別のパラメータとして入力し、演算の結果(BigDecimal)を浮動小数点数に変換する必要があります.
public static double add(double v1,double v2)public static double sub(double v1,double v2)public static double mul(double v1,double v2)public static double div(double v1,double v2)public static double div(double v1,double v2,int scale)public static double round(double v,int scale)
 
Javaコード
import java.math.BigDecimal;   
/**  
*Javaの単純なタイプでは浮動小数点数を正確に演算できないため、このツールクラスは精*加算減算および四捨五入を含む正確な浮動小数点数演算.  
*/  
public class Arith{//デフォルト除算演算精度private static final int DEF_DIV_SCALE = 10;//この類は実例化できないprivate Arith(){   
}   
/**  
*正確な加算を行います.  
*@param v 1被加算数*@param v 2加算*@return両パラメータの和*/  
public static double add(double v1,double v2){   
BigDecimal b1 = new BigDecimal(Double.toString(v1));   
BigDecimal b2 = new BigDecimal(Double.toString(v2));   
return b1.add(b2).doubleValue();   
}   
/**  
*正確な減算を行います.  
*@param v 1被減数*@param v 2減数*@return両パラメータの差*/  
public static double sub(double v1,double v2){   
BigDecimal b1 = new BigDecimal(Double.toString(v1));   
BigDecimal b2 = new BigDecimal(Double.toString(v2));   
return b1.subtract(b2).doubleValue();   
}   
/**  
*正確な乗算を行います.  
*@param v 1被乗数*@param v 2乗数*@return両パラメータの積*/  
public static double mul(double v1,double v2){   
BigDecimal b1 = new BigDecimal(Double.toString(v1));   
BigDecimal b2 = new BigDecimal(Double.toString(v2));   
return b1.multiply(b2).doubleValue();   
}   
/**  
*精確な除算演算を提供し、除算が尽きない場合、精確は*小数点以下10桁、以降の数字は四捨五入します.  
*@param v 1被除数*@param v 2除数*@return両パラメータの商*/  
public static double div(double v1,double v2){   
return div(v1,v2,DEF_DIV_SCALE);   
}   
/**  
*正確な除算演算を提供します.割り切れない場合はscaleパラメータで*定精度、以降の数字は四捨五入.  
*@param v 1被除数*@param v 2除数*@param scaleは、小数点以下の数桁まで正確にする必要があることを示します.  
*@return両パラメータの商*/  
public static double div(double v1,double v2,int scale){   
if(scale<0){   
throw new IllegalArgumentException(   
"The scale must be a positive integer or zero");   
}   
BigDecimal b1 = new BigDecimal(Double.toString(v1));   
BigDecimal b2 = new BigDecimal(Double.toString(v2));   
return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();   
}   
/**  
*精確な小数位四捨五入処理を提供します.  
*@param v四捨五入が必要な数字*@param scale小数点以下保留数位*@return四捨五入後の結果*/  
public static double round(double v,int scale){   
if(scale<0){   
throw new IllegalArgumentException("The scale must be a positive integer or zero");   
}   
BigDecimal b = new BigDecimal(Double.toString(v));   
BigDecimal one = new BigDecimal("1");   
return b.divide(one,scale,BigDecimal.ROUND_HALF_UP).doubleValue();   
}   
};