前言
在做一个账本功能时,需要统计一个月的金额总和,因为金额为两位小数,在常规求和时发现会自动四舍五入失真问题,不是我们想要的结果,下面给大家使用
BigDecimal解决这个问题顺便按照金额从大到小对集合进行排序
一、BigDecimal是什么?
Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。
二、步骤
1.引入库
直接上代码,这里以集合金额循环为例,代码如下(示例):
/**
*
* @param Bean 实体类
* @param baseNodeList 集合
* @return
*/
private String getMoney(List<Bean> baseNodeList) {
BigDecimal totalValues = new BigDecimal("0");
if (CollectionUtils.isNotEmpty(baseNodeList)) {
for (BaseNode baseNode : baseNodeList) {
if (baseNode instanceof InfoNode) {
InfoNode infoNode = (InfoNode) baseNode;
String money = infoNode.getPayBook().beanMoney;
totalValues = totalValues.add(new BigDecimal(money));
}
}
}
return totalValues.toString();
}
//按照金额从大到小对集合进行排序 list为集合 Bean为实体类,getMoney()为金额
Collections.sort(list, (Bean, t1) -> (new BigDecimal((t1).getMoney()).compareTo(new BigDecimal((Bean).getMoney()))));
总结
以上就是今天要讲的内容,本文简单介绍了计算总金额时使用BigDecimal解决失真及按照金额大小排序问题。