|
@@ -11,12 +11,14 @@ import java.io.UnsupportedEncodingException;
|
|
import java.lang.reflect.Field;
|
|
import java.lang.reflect.Field;
|
|
import java.lang.reflect.Modifier;
|
|
import java.lang.reflect.Modifier;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
+import java.math.RoundingMode;
|
|
import java.text.DecimalFormat;
|
|
import java.text.DecimalFormat;
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Matcher;
|
|
import java.util.regex.Pattern;
|
|
import java.util.regex.Pattern;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
+import java.util.stream.Stream;
|
|
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -952,7 +954,7 @@ public class StringUtils {
|
|
if (value instanceof Number) {
|
|
if (value instanceof Number) {
|
|
return true;
|
|
return true;
|
|
}
|
|
}
|
|
- String pattern = "^[+-]?\\d+(\\.\\d+)?$";
|
|
|
|
|
|
+ String pattern = "^[+-]?\\d+(\\.[\\dEe]+)?$";
|
|
Pattern r = Pattern.compile(pattern);
|
|
Pattern r = Pattern.compile(pattern);
|
|
Matcher m = r.matcher(String.valueOf(value));
|
|
Matcher m = r.matcher(String.valueOf(value));
|
|
return m.matches();
|
|
return m.matches();
|
|
@@ -1294,27 +1296,49 @@ public class StringUtils {
|
|
|
|
|
|
/**
|
|
/**
|
|
* @return int
|
|
* @return int
|
|
- * @Description 获取最大小数位
|
|
|
|
|
|
+ * @Description 获取最大小数位,转String计算小数位格式,超长浮点数先转double,四舍五入取五位
|
|
* @Param [number]
|
|
* @Param [number]
|
|
* @Author yangyj
|
|
* @Author yangyj
|
|
* @Date 2021.12.23 15:08
|
|
* @Date 2021.12.23 15:08
|
|
**/
|
|
**/
|
|
|
|
+ /*去除有效数字后面的0*/
|
|
public static Integer getScale(Object... number) {
|
|
public static Integer getScale(Object... number) {
|
|
int max = 0;
|
|
int max = 0;
|
|
if (number != null) {
|
|
if (number != null) {
|
|
- return getScale(Arrays.asList(number));
|
|
|
|
|
|
+ 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;
|
|
return max;
|
|
}
|
|
}
|
|
|
|
|
|
- private static Integer getScale(List<Object> number){
|
|
|
|
|
|
+ public static List<Object> scaleParam(Object ... number){
|
|
|
|
+ return Arrays.stream(number).filter(StringUtils::isNotEmpty).flatMap(e-> CustomFunction.obj2ListNe(e).stream()).distinct().filter(StringUtils::isNumber).map(e->{
|
|
|
|
+ /*0.3999999999999986 检测到超长小数位先转double处理,再还原回String*/
|
|
|
|
+ String tg=e.toString();
|
|
|
|
+ if(tg.length()-tg.indexOf(StringPool.DOT)>6||tg.contains("e")){
|
|
|
|
+ return BigDecimal.valueOf(Double.parseDouble(tg)).setScale(4, RoundingMode.HALF_UP).toString();
|
|
|
|
+ }else {
|
|
|
|
+ return e.toString();
|
|
|
|
+ }
|
|
|
|
+ }).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;
|
|
int max=0;
|
|
if(ListUtils.isNotEmpty(number)){
|
|
if(ListUtils.isNotEmpty(number)){
|
|
for (Object n : number) {
|
|
for (Object n : number) {
|
|
if (StringUtils.isNotEmpty(n)) {
|
|
if (StringUtils.isNotEmpty(n)) {
|
|
- String[] sa = n.toString().split(",");
|
|
|
|
|
|
+ String[] sa = n.toString().split(StringPool.COMMA);
|
|
for (String s : sa) {
|
|
for (String s : sa) {
|
|
- Matcher m = RegexUtils.matcher("(\\d)+.(\\d)*[1-9]", s);
|
|
|
|
|
|
+ Matcher m = RegexUtils.matcher(SCALE_REG[zero], s);
|
|
if (m.find()) {
|
|
if (m.find()) {
|
|
int cp = new StringBuilder(m.group()).reverse().toString().indexOf(".");
|
|
int cp = new StringBuilder(m.group()).reverse().toString().indexOf(".");
|
|
if (cp < 5) {
|
|
if (cp < 5) {
|
|
@@ -1329,11 +1353,23 @@ public class StringUtils {
|
|
}
|
|
}
|
|
|
|
|
|
// public static void main(String[] args) {
|
|
// public static void main(String[] args) {
|
|
-// List<Object> list = Arrays.asList("16.001",27.0,5,6);
|
|
|
|
|
|
+// List<Double> list = new ArrayList<>();
|
|
|
|
+// list.add(Double.parseDouble("0.3999999999999986"));
|
|
|
|
+// list.add(Double.parseDouble("0.1999999999999996"));
|
|
|
|
+// list.add(Double.parseDouble("-0.21"));
|
|
|
|
+// list.add(Double.parseDouble("-1.2632e1"));
|
|
// System.out.println(getScale(list));
|
|
// System.out.println(getScale(list));
|
|
-// System.out.println(getScale(16.00,17.00,10,8));
|
|
|
|
|
|
+// System.out.println(getScaleZero(list));
|
|
// }
|
|
// }
|
|
|
|
|
|
|
|
+/* public static void main(String[] args) {
|
|
|
|
+ List<Object> list = Arrays.asList("16.001",27.0,5,6);
|
|
|
|
+ System.out.println(getScale(list));
|
|
|
|
+ System.out.println(getScaleZero(150.0));
|
|
|
|
+ System.out.println(getScale(150.0));
|
|
|
|
+
|
|
|
|
+ }*/
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* @return java.lang.String
|
|
* @return java.lang.String
|
|
* @Description 公式脚本转义
|
|
* @Description 公式脚本转义
|