BigDecimal常用构造函数
1、创建一个具有参数所指定整数值的对象
BigDecimal(int)
2、创建一个具有参数所指定双精度值的对象
BigDecimal(double)
3、创建一个具有参数所指定长整数值的对象
BigDecimal(long)
4、创建一个具有参数所指定以字符串表示的数值的对象
BigDecimal(String)
BigDecimal常用方法
1、BigDecimal对象中的值相加,返回BigDecimal对象
add(BigDecimal)
2、BigDecimal对象中的值相减,返回BigDecimal对象
subtract(BigDecimal)
3、BigDecimal对象中的值相乘,返回BigDecimal对象
multiply(BigDecimal)
4、BigDecimal对象中的值相除,返回BigDecimal对象
divide(BigDecimal)
5、将BigDecimal对象中的值转换成字符串
toString()
6、将BigDecimal对象中的值转换成双精度数
doubleValue()
7、将BigDecimal对象中的值转换成单精度数
floatValue()
8、将BigDecimal对象中的值转换成长整数
longValue()
9、将BigDecimal对象中的值转换成整数
intValue()
10、BigDecimal大小比较
java中对BigDecimal比较大小一般用的是bigdemical的compareTo方法
BigDecimal格式化
以利用BigDecimal对货币和百分比格式化为例。首先,创建BigDecimal对象,进行BigDecimal的算术运算后,分别建立对货币和百分比格式化的引用,最后利用BigDecimal对象作为format()方法的参数,输出其格式化的货币值和百分比。
举例:
现在有个需求,要求销售数量占比和销售金额占比,就可以利用这个函数进行处理。
public List<MarketingTicketSumVO> findVisitorTicketSum(QueryMarketingAnalysisDTO dto) {
List<MarketingTicketSumVO> ticketSumVOS = this.refiningBusinessDataCustomerInfoManger.findVisitorTicketSum(dto);
if(CollUtil.isNotEmpty(ticketSumVOS)){
BigDecimal total = new BigDecimal(0);
BigDecimal total1 = new BigDecimal(0);
for (MarketingTicketSumVO ticketSumVO : ticketSumVOS) {
total = total.add(new BigDecimal(ticketSumVO.getSaleQuantity()== null ? 0 : ticketSumVO.getSaleQuantity()));
total1 = total1.add(ticketSumVO.getTotalPrice()== null ? BigDecimal.valueOf(0) : ticketSumVO.getTotalPrice());
}
if(total.compareTo(BigDecimal.ZERO) != 0){
for (MarketingTicketSumVO ticketSumVO : ticketSumVOS) {
BigDecimal bigDecimal = new BigDecimal(ticketSumVO.getSaleQuantity());
BigDecimal range = bigDecimal.divide(total,4,RoundingMode.HALF_UP);
ticketSumVO.setProportion(new DecimalFormat("#.##%").format(range));
BigDecimal bigDecimal1 = new BigDecimal(String.valueOf(ticketSumVO.getTotalPrice()));
BigDecimal range1 = bigDecimal1.divide(total1,4,RoundingMode.HALF_UP);
ticketSumVO.setSaleProportion(new DecimalFormat("#.##%").format(range1));
}
}
}
return ticketSumVOS;
}
解析
首先说一下用法,BigDecimal中的divide主要就是用来做除法的运算。其中有这么一个方法.
public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode)
第一个参数是除数,第二个参数代表保留几位小数,第三个代表的是使用的模式。
BigDecimal.ROUND_DOWN:直接省略多余的小数,比如1.28如果保留1位小数,得到的就是1.2
BigDecimal.ROUND_UP:直接进位,比如1.21如果保留1位小数,得到的就是1.3
BigDecimal.ROUND_HALF_UP:四舍五入,2.35保留1位,变成2.4
BigDecimal.ROUND_HALF_DOWN:四舍五入,2.35保留1位,变成2.3