Java數(shù)學工具類MathUtil詳解
更新時間:2021年09月13日 15:55:29 作者:BlueKitty1210
這篇文章主要為大家詳細介紹了Java數(shù)學工具類MathUtil的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了Java數(shù)學工具類MathUtil的具體代碼,供大家參考,具體內(nèi)容如下
package cn.xbz.util.math;
import java.math.BigDecimal;
/**
* @title 數(shù)學計算工具類
* @description 提供常用的數(shù)值加減乘除計算 , 及多個數(shù)值的求和 , 平均值 , 最大最小值計算
*/
public class XMathUtil {
/** 默認的除法精確度 */
private static final int DEF_DIV_SCALE = 2;
/**
* 精確加法運算
* @param v1 被加數(shù)
* @param v2 加數(shù)
* @return 兩個參數(shù)的和(BigDecimal)
*/
public static BigDecimal add(BigDecimal v1, BigDecimal v2) {
if (null == v1) {
v1 = BigDecimal.ZERO;
}
if (null == v2) {
v2 = BigDecimal.ZERO;
}
return v1.add(v2);
}
/**
* 精確減法運算
* @param v1 被減數(shù)
* @param v2 減數(shù)
* @return 兩個參數(shù)的差(BigDecimal)
*/
public static BigDecimal subtract(BigDecimal v1, BigDecimal v2) {
if (null == v1) {
v1 = BigDecimal.ZERO;
}
if (null == v2) {
v2 = BigDecimal.ZERO;
}
return v1.subtract(v2);
}
/**
* 精確乘法運算
* @param v1 被乘數(shù)
* @param v2 乘數(shù)
* @return 兩個參數(shù)的積(BigDecimal)
*/
public static BigDecimal multiply(BigDecimal v1, BigDecimal v2) {
if (null == v1) {
v1 = BigDecimal.ONE;
}
if (null == v2) {
v2 = BigDecimal.ONE;
}
return v1.multiply(v2);
}
/**
* ( 相對 )精確除法運算 , 當發(fā)生除不盡情況時 , 精確到 小數(shù)點以后2位 , 以后數(shù)字四舍五入
* @param v1 被除數(shù)
* @param v2 除數(shù)
* @return 兩個參數(shù)的商(BigDecimal)
*/
public static BigDecimal divide(BigDecimal v1, BigDecimal v2) {
return v1.divide(v2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP);
}
/**
* ( 相對 )精確除法運算 . 當發(fā)生除不盡情況時 , 由scale參數(shù)指 定精度 , 以后數(shù)字四舍五入
* @param v1 被除數(shù)
* @param v2 除數(shù)
* @param scale 表示表示需要精確到小數(shù)點以后幾位
* @return 兩個參數(shù)的商(BigDecimal)
*/
public static BigDecimal divide(BigDecimal v1, BigDecimal v2, Integer scale) {
if (null == v1) {
return BigDecimal.ZERO;
}
if (null == v2) {
v2 = BigDecimal.ONE;
}
if (v2.compareTo(BigDecimal.ZERO) == 0) {
throw new IllegalArgumentException("除數(shù)不能為0");
}
if (scale < 0) {
throw new IllegalArgumentException("精確度不能小于0");
}
return v1.divide(v2, scale, BigDecimal.ROUND_HALF_UP);
}
/**
* 精確加法運算
* @param v1 被加數(shù)
* @param v2 加數(shù)
* @return 兩個參數(shù)的和(String)
*/
public static String add(String v1, String v2) {
if (isBlank(v1)) {
v1 = "0";
}
if (isBlank(v2)) {
v2 = "0";
}
BigDecimal b1 = new BigDecimal(v1.trim());
BigDecimal b2 = new BigDecimal(v2.trim());
return String.valueOf(add(b1, b2));
}
/**
* 精確減法運算
* @param v1 被減數(shù)
* @param v2 減數(shù)
* @return 兩個參數(shù)的差(String)
*/
public static String subtract(String v1, String v2) {
if (isBlank(v1)) {
v1 = "0";
}
if (isBlank(v2)) {
v2 = "0";
}
BigDecimal b1 = new BigDecimal(v1.trim());
BigDecimal b2 = new BigDecimal(v2.trim());
return String.valueOf(subtract(b1, b2));
}
/**
* 精確乘法運算
* @param v1 被乘數(shù)
* @param v2 乘數(shù)
* @return 兩個參數(shù)的積(String)
*/
public static String multiply(String v1, String v2) {
if (isBlank(v1)) {
v1 = "1";
}
if (isBlank(v2)) {
v2 = "1";
}
BigDecimal b1 = new BigDecimal(v1.trim());
BigDecimal b2 = new BigDecimal(v2.trim());
return String.valueOf(multiply(b1, b2));
}
/**
* ( 相對 )精確除法運算 , 當發(fā)生除不盡情況時 , 精確到 小數(shù)點以后2位 , 以后數(shù)字四舍五入
* @param v1 被除數(shù)
* @param v2 除數(shù)
* @return 兩個參數(shù)的商(String)
*/
public static String divide(String v1, String v2) {
return divide(v1, v2, DEF_DIV_SCALE);
}
/**
* ( 相對 )精確除法運算 . 當發(fā)生除不盡情況時 , 由scale參數(shù)指 定精度 , 以后數(shù)字四舍五入
* @param v1 被除數(shù)
* @param v2 除數(shù)
* @param scale 表示表示需要精確到小數(shù)點以后幾位
* @return 兩個參數(shù)的商(String)
*/
public static String divide(String v1, String v2, Integer scale) {
if (null == v1) {
return "0";
}
if (null == v2) {
v2 = "1";
}
BigDecimal b1 = new BigDecimal(v1.trim());
BigDecimal b2 = new BigDecimal(v2.trim());
return String.valueOf(divide(b1, b2, scale));
}
/**
* 精確加法運算 , 計算多個數(shù)值總和 , 若其中有null值則忽略
* @param valList 被加數(shù)集合
* @return 兩個參數(shù)的和(BigDecimal)
*/
public static BigDecimal sum(BigDecimal v1, BigDecimal... valList) {
if (null == v1) {
v1 = BigDecimal.ZERO;
}
if (null == valList || valList.length == 0) {
return v1;
}
for (BigDecimal val : valList) {
if (null != val) {
v1 = v1.add(val);
}
}
return v1;
}
/**
* 精確加法運算 , 計算多個數(shù)值總和 , 若其中有null值則忽略
* @param valList 被加數(shù)集合
* @return 兩個參數(shù)的和(String)
*/
public static String sum(String v1, String... valList) {
if (isBlank(v1)) {
v1 = "0";
}
if (null == valList || valList.length == 0) {
return v1;
}
BigDecimal b1 = new BigDecimal(v1.trim());
for (String val : valList) {
if (!isBlank(val)) {
b1 = add(b1, new BigDecimal(val.trim()));
}
}
return String.valueOf(b1);
}
/**
* 平均數(shù)
* @param valList
* @return
*/
public static BigDecimal avg(BigDecimal... valList) {
if (null != valList && valList.length != 0) {
return divide(sum(BigDecimal.ZERO, valList), new BigDecimal(valList.length));
}
return BigDecimal.ZERO;
}
/**
* 平均數(shù)
* @param valList
* @return
*/
public static String avg(String... valList) {
if (null != valList && valList.length != 0) {
return divide(sum("0", valList), String.valueOf(valList.length));
}
return "0";
}
/**
* 最大值
* @param v1
* @param valList
* @return
*/
public static BigDecimal max(BigDecimal v1, BigDecimal... valList) {
BigDecimal max = v1;
if (null == valList || valList.length == 0) {
return max;
}
for (BigDecimal val : valList) {
if (null != val && val.compareTo(max) > 0) {
max = val;
}
}
return max;
}
/**
* 最大值
* @param valList
* @return
*/
public static BigDecimal maxArr(BigDecimal... valList) {
if (null == valList || valList.length == 0) {
return null;
}
return max(valList[0], valList);
}
/**
* 最小值
* @param v1
* @param valList
* @return
*/
public static BigDecimal min(BigDecimal v1, BigDecimal... valList) {
BigDecimal min = v1;
if (null == valList || valList.length == 0) {
return min;
}
for (BigDecimal val : valList) {
if (null != val && val.compareTo(min) < 0) {
min = val;
}
}
return min;
}
/**
* 最小值
* @param valList
* @return
*/
public static BigDecimal minArr(BigDecimal... valList) {
if (null == valList || valList.length == 0) {
return null;
}
return min(valList[0], valList);
}
/**
* 最大值
* @param v1
* @param valList
* @return
*/
public static String max(String v1, String... valList) {
if (isBlank(v1)) {
return null;
}
if (null == valList || valList.length == 0) {
return v1;
}
BigDecimal maxBd = new BigDecimal(v1.trim());
for (String val : valList) {
if (!isBlank(val) && new BigDecimal(val).compareTo(maxBd) > 0) {
maxBd = new BigDecimal(val);
}
}
return String.valueOf(maxBd);
}
/**
* 最大值
* @param valList
* @return
*/
public static String maxArr(String... valList) {
if (null == valList || valList.length == 0) {
return null;
}
return max(valList[0], valList);
}
/**
* 最小值
* @param v1
* @param valList
* @return
*/
public static String min(String v1, String... valList) {
if (isBlank(v1)) {
return null;
}
if (null == valList || valList.length == 0) {
return v1;
}
BigDecimal minBd = new BigDecimal(v1.trim());
for (String val : valList) {
if (!isBlank(val) && new BigDecimal(val).compareTo(minBd) < 0) {
minBd = new BigDecimal(val);
}
}
return String.valueOf(minBd);
}
/**
* 最小值
* @param valList
* @return
*/
public static String minArr(String... valList) {
if (null == valList || valList.length == 0) {
return null;
}
return min(valList[0], valList);
}
/**
* 判斷字符串是否為空(不依賴第三方)
* @param str
* @return
*/
private static boolean isBlank(String str) {
return null == str || str.trim().length() == 0;
}
}
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
springboot接入cachecloud redis示例實踐
這篇文章主要介紹了springboot接入cachecloud redis示例實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-10-10
Serializable接口的作用_動力節(jié)點Java學院整理
這篇文章主要為大家詳細介紹了java中Serializable接口的作用,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
Spring?Boot整合持久層之JPA多數(shù)據(jù)源
JPA(Java Persistence API)Java 持久化 API,是 Java 持久化的標準規(guī)范,Hibernate 是持久化規(guī)范的技術(shù)實現(xiàn),而 Spring Data JPA 是在 Hibernate 基礎上封裝的一款框架2022-08-08
java微信開發(fā)API第四步 微信自定義個性化菜單實現(xiàn)
這篇文章主要為大家詳細介紹了java微信開發(fā)API第四步,自定義菜單以及個性化菜單實現(xiàn) ,感興趣的小伙伴們可以參考一下2016-06-06

