public static void main(String[] args) {
BigDecimal a = new BigDecimal(10);
BigDecimal b = new BigDecimal(5);
if (a.compareTo(b) == 0)
System.out.println("a = b");
if (a.compareTo(b) == -1)
System.out.println("a < b");
if (a.compareTo(b) == 1)
System.out.println("a > b");
if (a.compareTo(b) != 0)
System.out.println("a != b");
if (a.compareTo(b) != -1)
System.out.println("a >= b");
if (a.compareTo(b) != 1)
System.out.println("a <= b");
}
import java.math.BigDecimal;
/**
* @date 2018年7月30日
* @description 提供精确的浮点数运算(包括加、减、乘、除、四舍五入)工具类
*
*/
public class BigDecimalUtil {
// 除法运算默认精度
private static final int DEF_DIV_SCALE = 2;
private BigDecimalUtil() {
}
/**
* 精确加法
*/
public static BigDecimal add(String value1, String value2) {
BigDecimal b1 = new BigDecimal(value1);
BigDecimal b2 = new BigDecimal(value2);
BigDecimal add = b1.add(b2);
BigDecimal bigDecimal = add.setScale(2, BigDecimal.ROUND_HALF_UP);
return bigDecimal;
}
/**
* 精确加法
*/
public static BigDecimal add(String value1, String value2, String value3) {
BigDecimal b1 = new BigDecimal(value1);
BigDecimal b2 = new BigDecimal(value2);
BigDecimal b3 = new BigDecimal(value3);
BigDecimal add = b1.add(b2).add(b3);
BigDecimal bigDecimal = add.setScale(2, BigDecimal.ROUND_HALF_UP);
return bigDecimal;
}
/**
* 精确加法
*/
public static BigDecimal add(BigDecimal value1, BigDecimal value2) {
BigDecimal add = value1.add(value2);
BigDecimal bigDecimal = add.setScale(2, BigDecimal.ROUND_HALF_UP);
return bigDecimal;
}
/**
* 精确加法
*/
public static BigDecimal add(BigDecimal value1, BigDecimal value2, BigDecimal value3) {
BigDecimal add = value1.add(value2).add(value3);
BigDecimal bigDecimal = add.setScale(2, BigDecimal.ROUND_HALF_UP);
return bigDecimal;
}
/**
* 精确减法
*/
public static BigDecimal sub(String value1, String value2) {
BigDecimal b1 = new BigDecimal(value1);
BigDecimal b2 = new BigDecimal(value2);
BigDecimal subtract = b1.subtract(b2);
BigDecimal bigDecimal = subtract.setScale(2, BigDecimal.ROUND_HALF_UP);
return bigDecimal;
}
/**
* 精确减法
*/
public static BigDecimal sub(String value1, String value2, String value3) {
BigDecimal b1 = new BigDecimal(value1);
BigDecimal b2 = new BigDecimal(value2);
BigDecimal b3 = new BigDecimal(value3);
BigDecimal subtract = b1.subtract(b2).subtract(b3);
BigDecimal bigDecimal = subtract.setScale(2, BigDecimal.ROUND_HALF_UP);
return bigDecimal;
}
/**
* 精确减法
*/
public static BigDecimal sub(BigDecimal value1, BigDecimal value2) {
BigDecimal subtract = value1.subtract(value2);
BigDecimal bigDecimal = subtract.setScale(2, BigDecimal.ROUND_HALF_UP);
return bigDecimal;
}
/**
* 精确减法
*/
public static BigDecimal sub(BigDecimal value1, BigDecimal value2, BigDecimal value3) {
BigDecimal subtract = value1.subtract(value2).subtract(value3);
BigDecimal bigDecimal = subtract.setScale(2, BigDecimal.ROUND_HALF_UP);
return bigDecimal;
}
/**
* 精确乘法
*/
public static BigDecimal mul(String value1, String value2) {
BigDecimal b1 = new BigDecimal(value1);
BigDecimal b2 = new BigDecimal(value2);
BigDecimal multiply = b1.multiply(b2);
BigDecimal aamont = multiply.setScale(2, BigDecimal.ROUND_HALF_UP);
return aamont;
}
/**
* 精确乘法
*/
public static BigDecimal mul(String value1, String value2, String value3) {
BigDecimal b1 = new BigDecimal(value1);
BigDecimal b2 = new BigDecimal(value2);
BigDecimal b3 = new BigDecimal(value3);
BigDecimal multiply = b1.multiply(b2).multiply(b3);
BigDecimal aamont = multiply.setScale(2, BigDecimal.ROUND_HALF_UP);
return aamont;
}
/**
* 精确乘法
*/
public static BigDecimal mul(BigDecimal value1, BigDecimal value2) {
BigDecimal multiply = value1.multiply(value2);
BigDecimal aamont = multiply.setScale(2, BigDecimal.ROUND_HALF_UP);
return aamont;
}
/**
* 精确乘法
*/
public static BigDecimal mul(BigDecimal value1, BigDecimal value2, BigDecimal value3) {
BigDecimal multiply = value1.multiply(value2).multiply(value3);
BigDecimal aamont = multiply.setScale(2, BigDecimal.ROUND_HALF_UP);
return aamont;
}
/**
* 精确除法
*
* @param
*/
public static BigDecimal div(String value1, String value2){
BigDecimal b1 = new BigDecimal(value1);
BigDecimal b2 = new BigDecimal(value2);
BigDecimal bigDecimal = b1.divide(b2, 2, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_HALF_UP);
return bigDecimal;
}
/**
* 精确除法
*
* @param
*/
public static BigDecimal div(BigDecimal value1, BigDecimal value2) {
BigDecimal bigDecimal = value1.divide(value2, 2, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_HALF_UP);
return bigDecimal;
}
/**
*入库
*
* 加权平均单价=(个数*价钱+本期个数*价钱)/(期初数量+本期购进数量)
*加权平均价 进货
*primeNumbers 期初个数
* primePrice 期初价钱
*
* currentNumbers 本期数量
* currentPrice 本期价钱
* @param
*/
public static BigDecimal wapAdvance(BigDecimal primeNumbers, BigDecimal primePrice, BigDecimal currentNumbers,BigDecimal currentPrice) {
BigDecimal prime = primeNumbers.multiply(primePrice);
BigDecimal current = currentNumbers.multiply(currentPrice);
BigDecimal primeCurrent = prime.add(current);
BigDecimal num = primeNumbers.add(currentNumbers);
BigDecimal bigDecimal = primeCurrent.divide(num, 2, BigDecimal.ROUND_DOWN).setScale(2, BigDecimal.ROUND_HALF_UP);
return bigDecimal;
}
/**
*退货
*
* 出价
* (加权值 * 期初数量 -本期退货成本*本期退货数量)/ (库存-本期退货数量)
*
*加权平均价 出货
*primeNumbers 期初个数
* primePrice 期初价钱
*
* currentNumbers 本期退货数量
* currentPrice 本期退货价钱
* @param
*/
public static BigDecimal wapOut (BigDecimal primeNumbers, BigDecimal primePrice, BigDecimal currentNumbers,BigDecimal currentPrice) {
BigDecimal primeMultiply = primePrice.multiply(primeNumbers);
BigDecimal currentUltiply = currentPrice.multiply(currentNumbers);
BigDecimal primeCurrentSubtract = primeMultiply.subtract(currentUltiply);
BigDecimal divideSubtract = primeNumbers.subtract(currentNumbers);
BigDecimal bigDecimal = primeCurrentSubtract.divide(divideSubtract, 3, BigDecimal.ROUND_DOWN).setScale(3, BigDecimal.ROUND_HALF_UP);
return bigDecimal;
}
}