|
@@ -3,11 +3,6 @@ package com.caimei365.commodity.utils;
|
|
|
import org.apache.commons.lang.StringUtils;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.text.DecimalFormat;
|
|
|
-import java.util.HashSet;
|
|
|
-import java.util.LinkedList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Set;
|
|
|
|
|
|
/**
|
|
|
* Description
|
|
@@ -16,139 +11,44 @@ import java.util.Set;
|
|
|
* @date : 2021/4/9
|
|
|
*/
|
|
|
public class MathUtil {
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- public static int default_scale = 4;
|
|
|
-
|
|
|
- private static final int MAX_GENERATE_COUNT = 99999;
|
|
|
- private static int generateCount = 0;
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 两个实数相除,默认四舍五入到4位
|
|
|
- *
|
|
|
- * @param v1
|
|
|
- * @param v2
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static BigDecimal div(Object v1, Object v2) {
|
|
|
- return div(v1, v2, default_scale);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 两个实数相除,默认四舍五入到scale位
|
|
|
- *
|
|
|
- * @param v1
|
|
|
- * @param v2
|
|
|
- * @param scale
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static BigDecimal div(Object v1, Object v2, int scale) {
|
|
|
- if (scale < 0) {
|
|
|
- throw new IllegalArgumentException("四舍五入的位数不能为负数");
|
|
|
- }
|
|
|
- BigDecimal b1 = convert(v1);
|
|
|
- BigDecimal b2 = convert(v2);
|
|
|
- if (equal0(b2)) {
|
|
|
- throw new IllegalArgumentException("除数不能为0");
|
|
|
- }
|
|
|
- return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP);
|
|
|
- }
|
|
|
-
|
|
|
- public static String formatDouble(double s) {
|
|
|
- DecimalFormat fmt = new DecimalFormat("0.00");
|
|
|
- return fmt.format(s);
|
|
|
- }
|
|
|
-
|
|
|
- public static String[] intersect(String[] arr1, String[] arr2){
|
|
|
- List<String> l = new LinkedList<String>();
|
|
|
- Set<String> common = new HashSet<String>();
|
|
|
- for(String str:arr1){
|
|
|
- if(!l.contains(str)){
|
|
|
- l.add(str);
|
|
|
- }
|
|
|
- }
|
|
|
- for(String str:arr2){
|
|
|
- if(l.contains(str)){
|
|
|
- common.add(str);
|
|
|
- }
|
|
|
- }
|
|
|
- String[] result={};
|
|
|
- return common.toArray(result);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- public static synchronized String getUniqueString() {
|
|
|
- if (generateCount > 99999) {generateCount = 0;}
|
|
|
- String uniqueNumber = Long.toString(System.currentTimeMillis())
|
|
|
- + Integer.toString(generateCount);
|
|
|
- generateCount++;
|
|
|
- return uniqueNumber;
|
|
|
- }
|
|
|
-
|
|
|
+ /** 默认小数位 */
|
|
|
+ private static final int DEFAULT_SCALE = 4;
|
|
|
/**
|
|
|
*
|
|
|
* 构造函数
|
|
|
*/
|
|
|
- private MathUtil() {
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 类型转换函数
|
|
|
- *
|
|
|
- * @param o
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static BigDecimal convert(Object o) {
|
|
|
- if (o == null) {
|
|
|
- return BigDecimal.ZERO;
|
|
|
- } else if (o instanceof BigDecimal) {
|
|
|
- return (BigDecimal) o;
|
|
|
- }
|
|
|
- String str = o.toString();
|
|
|
- if (StringUtils.isNotBlank(str)) {
|
|
|
- return new BigDecimal(str);
|
|
|
- } else {
|
|
|
- return BigDecimal.ZERO;
|
|
|
- }
|
|
|
- }
|
|
|
+ private MathUtil() {}
|
|
|
|
|
|
/**
|
|
|
* 两个实数相加
|
|
|
*
|
|
|
- * @param v1
|
|
|
- * @param v2
|
|
|
- * @return
|
|
|
+ * @param v1 BigDecimal
|
|
|
+ * @param v2 BigDecimal
|
|
|
+ * @return BigDecimal
|
|
|
*/
|
|
|
public static BigDecimal add(Object v1, Object v2) {
|
|
|
BigDecimal b1 = convert(v1);
|
|
|
BigDecimal b2 = convert(v2);
|
|
|
return b1.add(b2);
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
/**
|
|
|
* 两个实数相减
|
|
|
*
|
|
|
- * @param v1
|
|
|
- * @param v2
|
|
|
- * @return
|
|
|
+ * @param v1 BigDecimal
|
|
|
+ * @param v2 BigDecimal
|
|
|
+ * @return BigDecimal
|
|
|
*/
|
|
|
public static BigDecimal sub(Object v1, Object v2) {
|
|
|
BigDecimal b1 = convert(v1);
|
|
|
BigDecimal b2 = convert(v2);
|
|
|
return b1.subtract(b2);
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
/**
|
|
|
* 两个实数相乘
|
|
|
*
|
|
|
- * @param v1
|
|
|
- * @param v2
|
|
|
- * @return
|
|
|
+ * @param v1 BigDecimal
|
|
|
+ * @param v2 BigDecimal
|
|
|
+ * @return BigDecimal
|
|
|
*/
|
|
|
public static BigDecimal mul(Object v1, Object v2) {
|
|
|
BigDecimal b1 = convert(v1);
|
|
@@ -156,7 +56,6 @@ public class MathUtil {
|
|
|
return b1.multiply(b2);
|
|
|
|
|
|
}
|
|
|
-
|
|
|
/**
|
|
|
* 相个实数相乘并四舍五入到Sacle位
|
|
|
*
|
|
@@ -172,73 +71,73 @@ public class MathUtil {
|
|
|
BigDecimal b1 = convert(v1);
|
|
|
BigDecimal b2 = convert(v2);
|
|
|
return b1.multiply(b2).setScale(scale, BigDecimal.ROUND_HALF_UP);
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
/**
|
|
|
- * 两个实数比较
|
|
|
+ * 两个实数相除,四舍五入到默认位数
|
|
|
*
|
|
|
- * @param v1
|
|
|
- * @param v2
|
|
|
- * @return
|
|
|
+ * @param v1 BigDecimal
|
|
|
+ * @param v2 BigDecimal
|
|
|
+ * @return BigDecimal
|
|
|
*/
|
|
|
- public static int compare(Object v1, Object v2) {
|
|
|
- BigDecimal b1 = convert(v1);
|
|
|
- BigDecimal b2 = convert(v2);
|
|
|
- return b1.compareTo(b2);
|
|
|
- }
|
|
|
-
|
|
|
- public static boolean equal0(Object v1) {
|
|
|
- BigDecimal b1 = convert(v1);
|
|
|
- return b1.compareTo(BigDecimal.ZERO) == 0;
|
|
|
- }
|
|
|
-
|
|
|
- public static boolean notEqual0(Object v1) {
|
|
|
- BigDecimal b1 = convert(v1);
|
|
|
- return b1.compareTo(BigDecimal.ZERO) != 0;
|
|
|
+ public static BigDecimal div(Object v1, Object v2) {
|
|
|
+ return div(v1, v2, DEFAULT_SCALE);
|
|
|
}
|
|
|
-
|
|
|
/**
|
|
|
- * 两个整数比较
|
|
|
+ * 两个实数相除,默认四舍五入到scale位
|
|
|
*
|
|
|
- * @param v1
|
|
|
- * @param v2
|
|
|
- * @return
|
|
|
+ * @param v1 BigDecimal
|
|
|
+ * @param v2 BigDecimal
|
|
|
+ * @param scale 小数位
|
|
|
+ * @return BigDecimal
|
|
|
*/
|
|
|
- public static int compareInt(Integer v1, Integer v2) {
|
|
|
-
|
|
|
- if (v1 == null) {
|
|
|
- v1 = new Integer(0);
|
|
|
+ public static BigDecimal div(Object v1, Object v2, int scale) {
|
|
|
+ if (scale < 0) {
|
|
|
+ throw new IllegalArgumentException("四舍五入的位数不能为负数");
|
|
|
}
|
|
|
- if (v2 == null) {
|
|
|
- v2 = new Integer(0);
|
|
|
+ BigDecimal b1 = convert(v1);
|
|
|
+ BigDecimal b2 = convert(v2);
|
|
|
+ if (equal0(b2)) {
|
|
|
+ throw new IllegalArgumentException("除数不能为0");
|
|
|
}
|
|
|
- return v1.compareTo(v2);
|
|
|
+ return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 判断两个整数是否相等
|
|
|
+ * 两个实数比较
|
|
|
*
|
|
|
- * @param v1
|
|
|
- * @param v2
|
|
|
- * @return
|
|
|
+ * @param v1 BigDecimal
|
|
|
+ * @param v2 BigDecimal
|
|
|
+ * @return int [1:v1>v2, 0:v1=v2, 1:v1<v2]
|
|
|
*/
|
|
|
- public static boolean equal(Integer v1, Integer v2) {
|
|
|
-
|
|
|
- int result = compareInt(v1, v2);
|
|
|
- return result == 0;
|
|
|
+ public static int compare(Object v1, Object v2) {
|
|
|
+ BigDecimal b1 = convert(v1);
|
|
|
+ BigDecimal b2 = convert(v2);
|
|
|
+ return b1.compareTo(b2);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 判断两个整数不等
|
|
|
+ * 类型转换函数
|
|
|
*
|
|
|
- * @param v1
|
|
|
- * @param v2
|
|
|
- * @return
|
|
|
+ * @param o <T>
|
|
|
+ * @return BigDecimal
|
|
|
*/
|
|
|
- public static boolean notEqual(Integer v1, Integer v2) {
|
|
|
- int result = compareInt(v1, v2);
|
|
|
- return result != 0;
|
|
|
+ public static BigDecimal convert(Object o) {
|
|
|
+ if (o == null) {
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ } else if (o instanceof BigDecimal) {
|
|
|
+ return (BigDecimal) o;
|
|
|
+ }
|
|
|
+ String str = o.toString();
|
|
|
+ if (StringUtils.isNotBlank(str)) {
|
|
|
+ return new BigDecimal(str);
|
|
|
+ } else {
|
|
|
+ return BigDecimal.ZERO;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private static boolean equal0(Object v1) {
|
|
|
+ BigDecimal b1 = convert(v1);
|
|
|
+ return b1.compareTo(BigDecimal.ZERO) == 0;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -256,108 +155,7 @@ public class MathUtil {
|
|
|
return b.setScale(scale, BigDecimal.ROUND_HALF_UP);
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 将字符串转换成整型
|
|
|
- *
|
|
|
- * @param value
|
|
|
- * @param defaultNum
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static int parsetInt(String value, int defaultNum) {
|
|
|
- if (value != null && !value.equals("")) {
|
|
|
- int num = defaultNum;
|
|
|
- try {
|
|
|
- num = Integer.parseInt(value);
|
|
|
- } catch (Exception ignored) {
|
|
|
- }
|
|
|
- return num;
|
|
|
- } else {
|
|
|
- return defaultNum;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 将string转换为double
|
|
|
- *
|
|
|
- * @param value
|
|
|
- * @param defaultNum
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static double parseDouble(String value, double defaultNum) {
|
|
|
- if (StringUtils.isBlank(value)) {
|
|
|
- return defaultNum;
|
|
|
- }
|
|
|
-
|
|
|
- value = value.replaceAll(",", "");
|
|
|
- value = value.replaceAll(" ", "");
|
|
|
- value = value.replaceAll("¥", "");
|
|
|
-
|
|
|
- double num = defaultNum;
|
|
|
- try {
|
|
|
- num = Double.parseDouble(value);
|
|
|
- } catch (Exception ignored) {
|
|
|
- }
|
|
|
- return num;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 将string 转换为double
|
|
|
- *
|
|
|
- * @param value
|
|
|
- * @return
|
|
|
- */
|
|
|
- public static double parseDouble(String value) {
|
|
|
- return parseDouble(value, 0);
|
|
|
- }
|
|
|
-
|
|
|
- public static int isNullInteger(Integer v) {
|
|
|
- if (v == null) {
|
|
|
- return 0;
|
|
|
- } else {
|
|
|
- return v.intValue();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //
|
|
|
- private static double EARTH_RADIUS = 6378.137;
|
|
|
-
|
|
|
- private static double rad(double d) {
|
|
|
-
|
|
|
- return d * Math.PI / 180.0;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- public static double getDistance(double lat1, double lng1, double lat2, double lng2) {
|
|
|
-
|
|
|
- double radLat1 = rad(lat1);
|
|
|
-
|
|
|
- double radLat2 = rad(lat2);
|
|
|
-
|
|
|
- double a = radLat1 - radLat2;
|
|
|
-
|
|
|
- double b = rad(lng1) - rad(lng2);
|
|
|
-
|
|
|
- double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
|
|
|
-
|
|
|
- + Math.cos(radLat1) * Math.cos(radLat2)
|
|
|
-
|
|
|
- * Math.pow(Math.sin(b / 2), 2)));
|
|
|
-
|
|
|
- s = s * EARTH_RADIUS;
|
|
|
-
|
|
|
- s = Math.round(s * 10000) / 10000;
|
|
|
-
|
|
|
- return s;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
// public static void main(String[] args){
|
|
|
-// double lat1=118.105736;
|
|
|
-// double lng1=24.491558;
|
|
|
-// double lat2=118.110749;
|
|
|
-// double lng2=24.492824;
|
|
|
-// double t=getDistance(lat1,lng1,lat2,lng2);
|
|
|
-// System.out.println(t);
|
|
|
// }
|
|
|
|
|
|
}
|