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<Float> 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;
|
}else if(testRes>=(2*refRes)){
|
preCap= (float) 0.01;
|
}else {
|
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);
|
}
|
}
|