/**
* 测试数据->检查除数为0的报错异常
*/
public void demo1() {
BigDecimal currentYear = new BigDecimal("2.1");
BigDecimal maxCurentYear1 = new BigDecimal(0.00);
BigDecimal minCurentYear1 = new BigDecimal(0.00);
BigDecimal subtract = new BigDecimal(0.00);
BigDecimal x = new BigDecimal(0.00);
//
List<StockInstRatingEntity> currentyearList = new ArrayList<>();
StockInstRatingEntity po = new StockInstRatingEntity();
po.setCurrentYear1(new BigDecimal("5.20"));
StockInstRatingEntity po1 = new StockInstRatingEntity();
po1.setCurrentYear1(new BigDecimal("9.50"));
StockInstRatingEntity po2 = new StockInstRatingEntity();
po2.setCurrentYear1(new BigDecimal("7.50"));
currentyearList.add(po);
currentyearList.add(po1);
currentyearList.add(po2);
try {
currentyearList.stream().map(StockInstRatingEntity::getCurrentYear1).sorted(Comparator.reverseOrder()).forEach(n -> System.out.print(n + "\n"));
currentyearList.stream().map(StockInstRatingEntity::getCurrentYear1).sorted(Comparator.naturalOrder()).forEach(n -> System.out.print(n + "\n"));
/**
* Comparator.naturalOrder() 自然排序(升序)【1,2,5.20,5.21,6,7,8】
* Comparator.reverseOrder() 倒自然排序(倒序)【8,7,6,5.21,5.20,2,1】
*/
maxCurentYear1 = currentyearList.stream()
.map(StockInstRatingEntity::getCurrentYear1).max(Comparator.naturalOrder()).get();
/**
* max取最大【最后一个】
* min取最大【第一个】
* reverseOrder倒序之后是
*/
minCurentYear1 = currentyearList.stream()
.map(StockInstRatingEntity::getCurrentYear1).max(Comparator.reverseOrder()).get();
/**
* subtract() 减法 a.subtract(b) -> a-b
*/
subtract = maxCurentYear1.subtract(currentYear);
/**
* abs() 取最绝对值 负数也是整数
* divide() a.divide(b,4,BigDecimal.ROUND_HALF_UP) a除以b保留4位数,四舍五入进五
* multiply() a.multiply(b) a乘以b
* setScale(2,BigDecimal.ROUND_HALF_UP) 格式化小数点 ->保留两位小数点,四舍五入进五
*
* BigDecimal.ROUND_UP:进位制:不管保留数字后面是大是小(0除外)都会进1
* BigDecimal.ROUND_DOWN:保留设置数字,后面所有直接去除
* BigDecimal.ROUND_HALF_UP:根据保留数字后一位>=5进行四舍五入
* BigDecimal.ROUND_HALF_DOWN:根据保留数字后一位>5进行四舍五入
*/
x = subtract.abs().divide(currentYear.abs(), 4, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println("结果数据是:" + x);
} catch (ArithmeticException e) {
log.info("除数不能为0");
e.printStackTrace();
} catch (Exception e) {
log.info("所有异常");
e.printStackTrace();
}
}
/**
* 简单加减乘除->BigDecimal两个数字比较
*/
public void demo2() {
BigDecimal num1 = new BigDecimal(20);
BigDecimal num2 = new BigDecimal(10);
/**
* 返回值 1 ==》 a>b
* 返回值 -1 ==》 a<b
* 返回值 0 ==》 a=b
*/
int result = num1.compareTo(num2);
log.info("{}", result);
/**
* 加
*/
BigDecimal add = num1.add(num2);
log.info("{}", add);
/**
* 减
*/
BigDecimal subtract = num1.subtract(num2);
log.info("{}", subtract);
/**
* 乘
*/
BigDecimal multiply = num1.multiply(num2);
log.info("{}", multiply);
/**
* 除
*/
BigDecimal divide = num1.divide(num2);
log.info("{}", divide);
/**
* BigDecimal.ROUND_UP:进位制:不管保留数字后面是大是小(0除外)都会进1
* BigDecimal.ROUND_DOWN:保留设置数字,后面所有直接去除
* BigDecimal.ROUND_HALF_UP:根据保留数字后一位>=5进行四舍五入
* BigDecimal.ROUND_HALF_DOWN:根据保留数字后一位>5进行四舍五入
*/
BigDecimal divide1 = new BigDecimal("55.5").divide(new BigDecimal("21.4"), 4, BigDecimal.ROUND_UP);
log.info("{}", divide1);
BigDecimal divide2 = new BigDecimal("55.5").divide(new BigDecimal("21.4"), 4, BigDecimal.ROUND_DOWN);
log.info("{}", divide2);
BigDecimal divide3 = new BigDecimal("55.5").divide(new BigDecimal("21.4"), 4, BigDecimal.ROUND_HALF_UP);
log.info("{}", divide3);
BigDecimal divide4 = new BigDecimal("55.5").divide(new BigDecimal("21.4"), 4, BigDecimal.ROUND_HALF_DOWN);
log.info("{}", divide4);
}
BigDecimal使用日常使用方法
最新推荐文章于 2024-07-26 12:28:02 发布