import java.math.BigDecimal;
/**
*
* BigDecimal工具类 主要用于 //银行家舍入法
*
1. 被修约的数字小于5时,该数字舍去;
2. 被修约的数字大于5时,则进位;
3. 被修约的数字等于5时,要看5前面的数字,若是奇数则进位,若是偶数则将5舍掉,即修约后末尾数字都成为偶数;
若5的后面还有不为“0”的任何数,则此时无论5的前面是奇数还是偶数,均应进位。
举例,用上述规则对下列数据保留小数点后两位数据:
9.8249=9.82, 9.82671=9.83
9.8350=9.84, 9.8351 =9.84
9.8250=9.82, 9.82501=9.83
* @author lut
* @see
*/
public class BigDecimalUtil {
private static int ROUND_HALF_EVEN = BigDecimal.ROUND_HALF_EVEN;//银行家舍入法
/**
* 将数字字符串转化为BigDecimal
*
* @param str 数字字符串
*
* @return BigDecimal
*/
public static BigDecimal getBigDecimalForStr(String str){
return new BigDecimal(str);
}
/**
* 将数字字符串转化为double,并保留指定小数位
*
* @param str 数字字符串
* @param scale 指定要保留的小数位(可为空)
*
* @return double
*/
public static double getBigDecimalForStrReturnDouble(String str,Integer scale){
BigDecimal one = getBigDecimalForStr(str);
if(null != scale){
return one.setScale(scale, ROUND_HALF_EVEN).doubleValue();
}
return one.doubleValue();
}
/**
* 将double类型数字转化为BigDecimal
*
* @param str 数字字符串
*
* @return BigDecimal
*/
public static BigDecimal getBigDecimalForDouble(double one){
return getBigDecimalForStr(one + "");
}
/**
* 获取指定小数位的double
*
* @param one 数字
*
* @return double
*/
public static double getScaleDouble(double one,Integer scale){
return getBigDecimalForStrReturnDouble(one + "", scale);
}
/**
* 获取2位小数点的double
*
* @param one 数字
* @return double
*/
public static double getScaleDouble(double one){
return getScaleDouble(one, 2);
}
/**
* 两个BigDecimal数字相加
*
* @param one 第一个数字
* @param two 第二个数字
*
* @return BigDecimal
*/
public static BigDecimal add(BigDecimal one,BigDecimal two){
return one.add(two);//相加
}
/**
* 两个数字字符串相加
*
* @param oneNumber 第一个数字字符串
* @param twoNumber 第二个数字字符串
*
* @return BigDecimal
*/
public static BigDecimal add(String oneNumber,String twoNumber){
BigDecimal one = new BigDecimal(oneNumber);
BigDecimal two = new BigDecimal(twoNumber);
return add(one, two);
}
/**
* 两个double数字相加
*
* @param oneNumber 第一个数字
* @param twoNumber 第二个数字
*
* @return BigDecimal
*/
public static BigDecimal add(double oneNumber,double twoNumber){
return add(oneNumber + "", twoNumber + "");
}
/**
* 两个double数字相加并保留指定小数位
*
* @param one 第一个数字
* @param two 第二个数字
* @param scale 指定要保留的小数位(可为空)
*
* @return BigDecimal
*/
public static double add(double one,double two,Integer scale){
BigDecimal b = add(one, two);
if(null != scale){
return b.setScale(scale, ROUND_HALF_EVEN).doubleValue();
}
return b.doubleValue();
}
/**
* 两个数字字符串相加并保留指定小数位
*
* @param oneNumber 第一个数字字符串
* @param twoNumber 第二个数字字符串
* @param scale 指定要保留的小数位(可为空)
*
* @return double
*/
public static double addReturnDouble(String oneNumber,String twoNumber,Integer scale){
BigDecimal b = add(oneNumber, twoNumber);
if(null != scale){
return b.setScale(scale, ROUND_HALF_EVEN).doubleValue();
}
return b.doubleValue();
}
/**
* 两个BigDecimal数字相减
*
* @param one 第一个数
* @param two 第二个数
* @param scale 指定小数位
*
* @return BigDecimal
*/
public static BigDecimal subtract(BigDecimal one,BigDecimal two){
return one.subtract(two);//相减
}
/**
* 两个BigDecimal数字相减并保留指定小数位
*
* @param one 第一个数
* @param two 第二个数
* @param scale 指定小数位(可为空)
*
* @return double
*/
public static double subtractReturnDouble(BigDecimal one,BigDecimal two,Integer scale){
BigDecimal b = subtract(one, two);
if(null != scale){
return b.setScale(scale, ROUND_HALF_EVEN).doubleValue();
}
return b.doubleValue();
}
/**
* 两个数字字符串相减
*
* @param oneNumber 第一个数字字符串
* @param twoNumber 第二个数字字符串
* @param scale 指定小数位
*
* @return BigDecimal
*/
public static BigDecimal subtract(String oneNumber,String twoNumber){
BigDecimal one = new BigDecimal(oneNumber);
BigDecimal two = new BigDecimal(twoNumber);
return subtract(one, two);
}
/**
* 两个数字相减并保留指定小数位
*
* @param oneNumber 第一个数字
* @param twoNumber 第二个数字
* @param scale 指定小数位(可为空)
*
* @return double
*/
public static double subtractReturnDouble(double oneNumber,double twoNumber,Integer scale){
BigDecimal one = new BigDecimal(oneNumber + "");
BigDecimal two = new BigDecimal(twoNumber + "");
return subtractReturnDouble(one, two, scale);
}
/**
* 两个数字相乘并保留指定小数位
*
* @param oneNumber 第一个数字
* @param twoNumber 第二个数字
* @param scale 指定小数位(可为空)
*
* @return double
*/
public static double multiplyReturnDouble(double oneNumber, double twoNumber,Integer scale) {
BigDecimal one = new BigDecimal(oneNumber + "");
BigDecimal two = new BigDecimal(twoNumber + "");
return multiplyReturnDouble(one, two, scale);
}
/**
* 两个字符串相乘并保留指定小数位
*
* @param oneNumber 第一个字符串
* @param twoNumber 第二个字符串
* @param scale 指定小数位(可为空)
*
* @return double
*/
public static double multiplyReturnDouble(String oneNumber, String twoNumber,Integer scale) {
BigDecimal one = new BigDecimal(oneNumber);
BigDecimal two = new BigDecimal(twoNumber);
return multiplyReturnDouble(one, two, scale);
}
/**
* 两个BigDecimal数字相乘并保留指定小数位
*
* @param one 第一个数
* @param two 第二个数
* @param scale 指定小数位(可为空)
*
* @return double
*/
public static double multiplyReturnDouble( BigDecimal one,BigDecimal two,Integer scale){
BigDecimal b = one.multiply(two);
if(null != scale){
return b.setScale(scale, ROUND_HALF_EVEN).doubleValue();
}
return b.doubleValue();
}
/**
* 两个数字相除并保留指定小数位
*
* @param oneNumber 第一个数字
* @param twoNumber 第二个数字
* @param scale 指定小数位(可为空)
*
* @return double
*/
public static double divideReturnDouble(double oneNumber, double twoNumber,Integer scale) {
BigDecimal one = new BigDecimal(oneNumber + "");
BigDecimal two = new BigDecimal(twoNumber + "");
return divideReturnDouble(one, two, scale);
}
/**
* 两个字符串相除并保留指定小数位
*
* @param oneNumber 第一个字符串
* @param twoNumber 第二个字符串
* @param scale 指定小数位(可为空)
*
* @return double
*/
public static double divideReturnDouble(String oneNumber, String twoNumber,Integer scale) {
BigDecimal one = new BigDecimal(oneNumber);
BigDecimal two = new BigDecimal(twoNumber);
return divideReturnDouble(one, two, scale);
}
/**
* 两个BigDecimal数字相除并保留指定小数位
*
* @param one 第一个数
* @param two 第二个数
* @param scale 指定小数位(可为空)
*
* @return double
*/
public static double divideReturnDouble( BigDecimal one,BigDecimal two,Integer scale){
return one.divide(two,scale,ROUND_HALF_EVEN).doubleValue();
}