Java-BigDecimal专题-除法-百分比-stripTrailingZeros去0-除法求百分占比要先乘以100-list求和
1、去0:
1.1、方案一:
除法运算,2位小数,0、100临界值去掉0
private static String convertBigDecimal2String(BigDecimal d) {
// 100 是作为考试分数时的考量
if (d == null) {
return "0";
}
//百分比和得分使用场景
//d.intValue() == 0 || d.intValue() == 100 这种写法错误,0.90 会变成0 ,这里是BigDecimal,其他的场景应该也类似
if (d.equals(new BigDecimal("0")) || d.equals(new BigDecimal("100"))) {
return String.valueOf(d.intValue());
}
String result = String.valueOf(d);
if (result.endsWith(".0")) {
return result.replace(".0", "");
}
if (result.endsWith(".00")) {
return result.replace(".00", "");
}
return result;
}
1.1、方案二:
BigDecimal-stripTrailingZeros()-去掉0 :
stripTrailingZeros():去除尾部所有的0,并返回一个BigDecimal类型的数据,不能保证不是科学计数法。
后加toString()把BigDecimal类型的数据转化成String类型数据,但还是不能保证不是科学计数法。
后加toPlainString()把BigDecimal类型的数据转化成String类型数据,并保证不是科学计数法。
//输出3E+2 以科学计数法展示且是BigDecimal类型
System.out.println( new BigDecimal("300.0000").stripTrailingZeros());
//输出3E+2 以科学计数法展示且是String类型
System.out.println( new BigDecimal("300.0000").stripTrailingZeros().toString());
//输出300 String类型
System.out.println(new BigDecimal("300.0000").stripTrailingZeros().toPlainString());
原文链接:https://blog.csdn.net/weixin_45670589/article/details/125525463
2. 除法求百分占比要先乘以100:
private static BigDecimal getBigDecimalPercent(Integer count, Integer totalCount) {
//不要对除法的结果乘以100,要先乘以100,再做除法
//return new BigDecimal(count.toString()).divide(new BigDecimal(totalCount.toString()), 4, BigDecimal.ROUND_HALF_UP).multiply(BIG_DECIMAL_100).setScale(2);
return new BigDecimal(count.toString()).multiply(BIG_DECIMAL_100).divide(new BigDecimal(totalCount.toString()), 2, BigDecimal.ROUND_HALF_UP);
}
3. java list stream 处理 BigDecimal 求和相加
BigDecimal result2 = userList.stream()
// 将user对象的age取出来map为Bigdecimal
.map(User::getAge)
// 使用reduce()聚合函数,实现累加器
.reduce(BigDecimal.ZERO,BigDecimal::add);
正文到此结束