package com.whyc.util; import com.whyc.config.I18nLocaleResolver; import com.whyc.pojo.TestParam; import org.springframework.beans.factory.annotation.Autowired; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.stream.Collectors; public class MathUtil { //均一性 public static float getStandardDeviation(List list){ //求平均值 float avg = list.stream().collect(Collectors.averagingDouble(Float::floatValue)).floatValue(); //求方差 //相减,平方,累加 float subSquareTotal = 0.0f; for (Float item : list) { subSquareTotal += (item -avg)*(item -avg); } Float s = subSquareTotal/list.size(); //标准差 double σ = Math.sqrt(s.doubleValue()); return BigDecimal.valueOf(σ).setScale(4, RoundingMode.HALF_UP).floatValue(); } //评判整组的好坏flag:1差,2良,3优 电压; 内阻越大越不好 public static int getflag(float maxStd, float std, TestParam testParam){ int flag=0; float judgeStdLow=0f; float judgeStdHigh=0f; maxStd=maxStd*100; if (testParam!=null){ judgeStdLow=std*testParam.getResGoodCoeK3(); judgeStdHigh=std*testParam.getResBadCoeK4(); if(maxStd>=judgeStdHigh){ flag=1;//"差" }else if(maxStd>=judgeStdLow){ flag=2;//"良"; }else{ flag=3;//"优"; } } return flag; } //评判整组的好坏flag:1 电压; 内阻越大越不好 public static String getJudge(boolean zhFlag,int flag){ String judge=""; if(zhFlag) { judge="未知"; }else{ judge="unknown"; } switch (flag){ /*case 1:judge="差";break; case 2:judge="良";break; case 3:judge="优";break;*/ case 1: if(zhFlag) { judge="差"; }else{ judge="bad"; } break; case 2: if(zhFlag) { judge="良"; }else{ judge="good"; } break; case 3: if(zhFlag) { judge="优"; }else{ judge="excellent"; } break; } return judge; } /* (容量百分比预估计算方式) A、系统读取测试文件内参考值R(此时并没有分他是平均值或参考值,参考值可有在文件打开时手动更改): a、测试值R≤参考值R时,容量预估值=100% b、测试值R≥参考值2R时,容量预估值直接显示1% c、参考值R<测试值R<参考值2R时,容量预估值={100%~1%(比值=(1-(R测-R参)/R参)*100%”)} **/ public static float getPreCapTest(float testRes,float refRes){ float preCap=0f; if(testRes<=refRes){ preCap=1; } if(testRes>=(2*refRes)){ preCap= (float) 0.01; } if((testRes>refRes)&&(testRes<(2*refRes))){ float radio=(1-(testRes-refRes)/refRes); preCap= (float) (1-0.01*radio); } return preCap; } public static void main(String[] args) { Float[] f = {3.54f,3.55f,3.55f,3.56f,3.57f,3.56f,3.58f,3.58f,3.56f}; Float[] f2 = {3.53f,3.55f,3.56f,3.57f,3.59f,3.58f,3.6f,3.6f,3.61f}; Float standardDeviation = getStandardDeviation(Arrays.asList(f)); Float standardDeviation2 = getStandardDeviation(Arrays.asList(f2)); System.out.println(standardDeviation); System.out.println(standardDeviation2); } }