数据位数相同处理

​

//1.求样本原始平均值
String groupHumanValuesAverage = getGroupHumanValuesAverage(humanValues);
BigDecimal averageVal = new BigDecimal(groupHumanValuesAverage);
System.out.println("原始平均值:"+averageVal.toPlainString());
//2.找到非ND替换而来的数据样本
List<HumanValue> validSamples = humanValues.stream().filter(humanValue -> !humanValue.isNdReplace()).collect(Collectors.toList());
//3.判断是整数还是小数
BigDecimal firstSampleNum = new BigDecimal(CollUtil.getFirst(validSamples).getActValue());
String firstSample = firstSampleNum.toPlainString();
boolean isInteger = !firstSample.contains(".");
//4.若为整数,则对均值四舍五入保留0位小数
if (isInteger) {
    BigDecimal divide = averageVal.setScale(0, RoundingMode.HALF_UP);
    int deg = firstSample.length() - divide.toString().length();
    int scale = deg;
    divide = averageVal.setScale(scale,RoundingMode.HALF_UP);
    System.out.println("最终的平均值:"+divide.toPlainString());
    return divide.toPlainString();
}
//5.若为小数
int sampleIntegerPlaces = StrUtil.split(firstSample, StrUtil.DOT).get(0).length();
int sampleDecimalPlaces = StrUtil.split(firstSample, StrUtil.DOT).get(1).length();
int finalDecimalPlaces = sampleDecimalPlaces;
//6.获取平均值的整数位数
int averageIntegerPlaces = StrUtil.length(String.valueOf(averageVal.intValue()));
//7.如果平均值的整数位数比样本的整数位数大N位,则意味着小数位要比样本值少出N位
int integerPlacesCompare = averageIntegerPlaces - sampleIntegerPlaces;
finalDecimalPlaces = finalDecimalPlaces - integerPlacesCompare;
//8.最终小数位数保留
BigDecimal finalAverageVal = averageVal.setScale(finalDecimalPlaces, RoundingMode.HALF_UP);
System.out.println("最终的平均值:"+finalAverageVal.toPlainString());
return finalAverageVal.toPlainString();

[点击并拖拽以移动]

​

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值