構(gòu)造方法
- BigDecimal(double val) //不推薦
- BigDecimal(String str)
- BigDecimal(BigInteger val)
- BigDecimal(BigInteger unscaledVal, int scale)
工具類代碼
public class BigDecimalUtils {
/**
* 提供精確的加法運(yùn)算
*
* @param v1 被加數(shù)
* @param v2 加數(shù)
* @param scale 保留scale 位小數(shù)
* @return 兩個(gè)參數(shù)的和
*/
public static String add(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數(shù)位數(shù)必須大于零");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.add(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 提供精確的減法運(yùn)算
*
* @param v1 被減數(shù)
* @param v2 減數(shù)
* @param scale 保留scale 位小數(shù)
* @return 兩個(gè)參數(shù)的差
*/
public static String sub(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數(shù)位數(shù)必須大于零");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.subtract(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 提供精確的乘法運(yùn)算
*
* @param v1 被乘數(shù)
* @param v2 乘數(shù)
* @param scale 保留scale 位小數(shù)
* @return 兩個(gè)參數(shù)的積
*/
public static String mul(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數(shù)位數(shù)必須大于零");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 提供精確的除法運(yùn)算茂翔。當(dāng)發(fā)生除不盡的情況時(shí)鳄梅,由scale參數(shù)指定精度具则,以后的數(shù)字四舍五入
*
* @param v1 被除數(shù)
* @param v2 除數(shù)
* @param scale 表示需要精確到小數(shù)點(diǎn)以后幾位
* @return 兩個(gè)參數(shù)的商
*/
public static String div(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數(shù)位數(shù)必須大于零");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 提供精確的小數(shù)位四舍五入處理
*
* @param v 需要四舍五入的數(shù)字
* @param scale 小數(shù)點(diǎn)后保留幾位
* @return 四舍五入后的結(jié)果
*/
public static double round(double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數(shù)位數(shù)必須大于零");
}
BigDecimal b = new BigDecimal(Double.toString(v));
return b.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 提供精確的小數(shù)位四舍五入處理
*
* @param v 需要四舍五入的數(shù)字
* @param scale 小數(shù)點(diǎn)后保留幾位
* @return 四舍五入后的結(jié)果
*/
public static String round(String v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數(shù)位數(shù)必須大于零");
}
BigDecimal b = new BigDecimal(v);
return b.setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 取余數(shù)
*
* @param v1 被除數(shù)
* @param v2 除數(shù)
* @param scale 小數(shù)點(diǎn)后保留幾位
* @return 余數(shù)
*/
public static String remainder(String v1, String v2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("保留的小數(shù)位數(shù)必須大于零");
}
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
return b1.remainder(b2).setScale(scale, BigDecimal.ROUND_HALF_UP).toString();
}
/**
* 比較大小
*
* @param v1 被比較數(shù)
* @param v2 比較數(shù)
* @return 如果v1 大于v2 則 返回true 否則false
*/
public static boolean compare(String v1, String v2) {
BigDecimal b1 = new BigDecimal(v1);
BigDecimal b2 = new BigDecimal(v2);
int bj = b1.compareTo(b2);
if (bj > 0)
return true;
else
return false;
}
}