|
@@ -1,26 +1,20 @@
|
|
|
package org.springblade.common.utils;
|
|
|
|
|
|
-import cn.hutool.core.lang.func.Func;
|
|
|
import com.alibaba.cloud.commons.lang.StringUtils;
|
|
|
import org.springblade.common.constant.RegexConstant;
|
|
|
|
|
|
import java.io.*;
|
|
|
-import java.lang.annotation.Annotation;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.BigInteger;
|
|
|
-import java.net.JarURLConnection;
|
|
|
-import java.net.URL;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.security.MessageDigest;
|
|
|
import java.util.*;
|
|
|
-import java.util.jar.JarEntry;
|
|
|
-import java.util.jar.JarFile;
|
|
|
import java.util.regex.Matcher;
|
|
|
import java.util.regex.Pattern;
|
|
|
import java.util.stream.Collectors;
|
|
|
import java.util.stream.IntStream;
|
|
|
|
|
|
-import static java.math.BigDecimal.ROUND_CEILING;
|
|
|
-import static java.math.BigDecimal.ROUND_HALF_UP;
|
|
|
+import static java.math.BigDecimal.*;
|
|
|
|
|
|
/**
|
|
|
* @author yangyj
|
|
@@ -246,6 +240,7 @@ public class BaseUtils {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
/**
|
|
|
* @return java.util.List<java.lang.Object> 不能包含0
|
|
|
* @Description specifiedRangeList
|
|
@@ -275,9 +270,11 @@ public class BaseUtils {
|
|
|
}
|
|
|
Random rd = new Random();
|
|
|
int hzi = new BigDecimal(hz.toString()).multiply(new BigDecimal(passRate.toString())).setScale(0, ROUND_CEILING).intValue();
|
|
|
+ int loop=200;
|
|
|
for (int i = 0; i < hzi; i++) {
|
|
|
BigDecimal tb = new BigDecimal(rd.nextInt(max - min + 1) + min).divide(BigDecimal.valueOf(Math.pow(10, scaleI)), scaleI, ROUND_HALF_UP);
|
|
|
- if(tb.equals(BigDecimal.ZERO)){
|
|
|
+ if(tb.compareTo(BigDecimal.ZERO)==0&&loop>0){
|
|
|
+ loop--;
|
|
|
i--;
|
|
|
}else{
|
|
|
if (scaleI > 0) {
|
|
@@ -289,6 +286,7 @@ public class BaseUtils {
|
|
|
}
|
|
|
int total = handleObj2Integer(hz);
|
|
|
if (total - hzi > 0) {
|
|
|
+ loop=200;
|
|
|
for (int k = 0; k < total - hzi; k++) {
|
|
|
BigDecimal tb;
|
|
|
if (rd.nextBoolean()) {
|
|
@@ -296,7 +294,8 @@ public class BaseUtils {
|
|
|
} else {
|
|
|
tb = new BigDecimal(min - 1 - rd.nextInt(((max - min) / 2))).divide(BigDecimal.valueOf(Math.pow(10, scaleI)), scaleI, ROUND_HALF_UP);
|
|
|
}
|
|
|
- if(tb.equals(BigDecimal.ZERO)){
|
|
|
+ if(tb.compareTo(BigDecimal.ZERO)==0&&loop>0){
|
|
|
+ loop--;
|
|
|
k--;
|
|
|
}else {
|
|
|
if (scaleI > 0) {
|
|
@@ -348,6 +347,100 @@ public class BaseUtils {
|
|
|
}
|
|
|
return false;
|
|
|
}
|
|
|
+ public static Integer getScale(Object... number) {
|
|
|
+ int max = 0;
|
|
|
+ if (number != null) {
|
|
|
+ return getScale(scaleParam(number),1);
|
|
|
+ }
|
|
|
+ return max;
|
|
|
+ }
|
|
|
+ /**保留有效数字后面的0*/
|
|
|
+ public static Integer getScaleZero(Object... number){
|
|
|
+ int max = 0;
|
|
|
+ if (number != null) {
|
|
|
+ return getScale(scaleParam(number),0);
|
|
|
+ }
|
|
|
+ return max;
|
|
|
+ }
|
|
|
+
|
|
|
+ public static boolean containsZH(Object chars) {
|
|
|
+ Matcher m = Pattern.compile("[\u4e00-\u9fa5]").matcher(handleNull(chars));
|
|
|
+ return m.find();
|
|
|
+ }
|
|
|
+
|
|
|
+/* public static void main(String[] args) {
|
|
|
+ System.out.println(getScaleZero(152000,"±10.0"));
|
|
|
+ System.out.println(getScaleZero(152000,"-10.0,10"));
|
|
|
+ System.out.println(getScaleZero(152000,"-10.0,10.0"));
|
|
|
+ System.out.println(getScaleZero(Double.MAX_VALUE,"-10.0,10"));
|
|
|
+ System.out.println(getScaleZero(152000,"-10,10"));
|
|
|
+ }*/
|
|
|
+public static List<Object> obj2List(Object obj) {
|
|
|
+ List<Object> result = new ArrayList<>();
|
|
|
+ if (obj != null) {
|
|
|
+ List<Object> datas = new ArrayList<>();
|
|
|
+ if (obj instanceof List) {
|
|
|
+ datas = (List<Object>) obj;
|
|
|
+ } else {
|
|
|
+ datas.add(obj);
|
|
|
+ }
|
|
|
+ if (isNotEmpty(datas)) {
|
|
|
+ for (Object e : datas) {
|
|
|
+ boolean fi = isNotEmpty(e) && !containsZH(e.toString()) && (e.toString().contains("、") || e.toString().contains(",") || e.toString().contains(" ") || e.toString().contains(","));
|
|
|
+ if (fi) {
|
|
|
+ String s = e.toString().trim();
|
|
|
+ if (s.contains(" ")) {
|
|
|
+ s = s.replaceAll("\\s+", "、");
|
|
|
+ }
|
|
|
+ Object[] bs = s.split("[、,,]");
|
|
|
+ result.addAll(Arrays.asList(bs));
|
|
|
+ } else {
|
|
|
+ result.add(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+ public static List<Object> obj2ListNe(Object obj) {
|
|
|
+ List<Object> list = obj2List(obj);
|
|
|
+ return list.parallelStream().filter(BaseUtils::isNotEmpty).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ public static List<Object> scaleParam(Object ... number){
|
|
|
+ return Arrays.stream(number).filter(BaseUtils::isNotEmpty).flatMap(e-> BaseUtils.obj2ListNe(e).stream()).distinct().map(s->s.toString().replaceAll("±","")).filter(BaseUtils::isNumber).map(e->{
|
|
|
+ /*0.3999999999999986 检测到超长小数位先转double处理,再还原回String*/
|
|
|
+ String tg=e.toString();
|
|
|
+ int dot=tg.indexOf(".");
|
|
|
+ boolean unlimited=dot>0&&(tg.length()-dot>6);
|
|
|
+ if(unlimited||tg.contains("e")){
|
|
|
+ return BigDecimal.valueOf(Double.parseDouble(tg)).setScale(2, RoundingMode.HALF_UP).toString();
|
|
|
+ }else {
|
|
|
+ return e;
|
|
|
+ }
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ public static final String[] SCALE_REG=new String[]{"(\\d)+.(\\d)*[0-9]","(\\d)+.(\\d)*[1-9]"};
|
|
|
+ private static Integer getScale(List<Object> number,Integer zero){
|
|
|
+ int max=0;
|
|
|
+ if(isNotEmpty(number)){
|
|
|
+ for (Object n : number) {
|
|
|
+ if (isNotEmpty(n)) {
|
|
|
+ String[] sa = n.toString().split(",");
|
|
|
+ for (String s : sa) {
|
|
|
+ Matcher m = Pattern.compile(SCALE_REG[zero]).matcher(s);
|
|
|
+ if (m.find()) {
|
|
|
+ int cp = new StringBuilder(m.group()).reverse().toString().indexOf(".");
|
|
|
+ if (cp < 5) {
|
|
|
+ max = Math.max(cp, max);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return max;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
}
|