最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java數(shù)學(xué)工具類MathUtil詳解

 更新時(shí)間:2021年09月13日 15:55:29   作者:BlueKitty1210  
這篇文章主要為大家詳細(xì)介紹了Java數(shù)學(xué)工具類MathUtil的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Java數(shù)學(xué)工具類MathUtil的具體代碼,供大家參考,具體內(nèi)容如下

package cn.xbz.util.math;
 
import java.math.BigDecimal;
 
/**
 * @title 數(shù)學(xué)計(jì)算工具類
 * @description 提供常用的數(shù)值加減乘除計(jì)算 , 及多個(gè)數(shù)值的求和 , 平均值 , 最大最小值計(jì)算
 */
public class XMathUtil {
  /** 默認(rèn)的除法精確度 */
  private static final int DEF_DIV_SCALE = 2;
 
  /**
   * 精確加法運(yùn)算
   * @param v1 被加數(shù)
   * @param v2 加數(shù)
   * @return 兩個(gè)參數(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);
  }
 
  /**
   * 精確減法運(yùn)算
   * @param v1 被減數(shù)
   * @param v2 減數(shù)
   * @return 兩個(gè)參數(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);
  }
 
  /**
   * 精確乘法運(yùn)算
   * @param v1 被乘數(shù)
   * @param v2 乘數(shù)
   * @return 兩個(gè)參數(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);
  }
 
  /**
   * ( 相對(duì) )精確除法運(yùn)算 , 當(dāng)發(fā)生除不盡情況時(shí) , 精確到 小數(shù)點(diǎn)以后2位 , 以后數(shù)字四舍五入
   * @param v1 被除數(shù)
   * @param v2 除數(shù)
   * @return 兩個(gè)參數(shù)的商(BigDecimal)
   */
  public static BigDecimal divide(BigDecimal v1, BigDecimal v2) {
    return v1.divide(v2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP);
  }
 
  /**
   * ( 相對(duì) )精確除法運(yùn)算 . 當(dāng)發(fā)生除不盡情況時(shí) , 由scale參數(shù)指 定精度 , 以后數(shù)字四舍五入
   * @param v1 被除數(shù)
   * @param v2 除數(shù)
   * @param scale 表示表示需要精確到小數(shù)點(diǎn)以后幾位
   * @return 兩個(gè)參數(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);
  }
 
  /**
   * 精確加法運(yùn)算
   * @param v1 被加數(shù)
   * @param v2 加數(shù)
   * @return 兩個(gè)參數(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));
  }
 
 
  /**
   * 精確減法運(yùn)算
   * @param v1 被減數(shù)
   * @param v2 減數(shù)
   * @return 兩個(gè)參數(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));
  }
 
  /**
   * 精確乘法運(yùn)算
   * @param v1 被乘數(shù)
   * @param v2 乘數(shù)
   * @return 兩個(gè)參數(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));
  }
 
  /**
   * ( 相對(duì) )精確除法運(yùn)算 , 當(dāng)發(fā)生除不盡情況時(shí) , 精確到 小數(shù)點(diǎn)以后2位 , 以后數(shù)字四舍五入
   * @param v1 被除數(shù)
   * @param v2 除數(shù)
   * @return 兩個(gè)參數(shù)的商(String)
   */
  public static String divide(String v1, String v2) {
    return divide(v1, v2, DEF_DIV_SCALE);
  }
 
  /**
   * ( 相對(duì) )精確除法運(yùn)算 . 當(dāng)發(fā)生除不盡情況時(shí) , 由scale參數(shù)指 定精度 , 以后數(shù)字四舍五入
   * @param v1 被除數(shù)
   * @param v2 除數(shù)
   * @param scale 表示表示需要精確到小數(shù)點(diǎn)以后幾位
   * @return 兩個(gè)參數(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));
  }
 
  /**
   * 精確加法運(yùn)算 , 計(jì)算多個(gè)數(shù)值總和 , 若其中有null值則忽略
   * @param valList 被加數(shù)集合
   * @return 兩個(gè)參數(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;
  }
 
  /**
   * 精確加法運(yùn)算 , 計(jì)算多個(gè)數(shù)值總和 , 若其中有null值則忽略
   * @param valList 被加數(shù)集合
   * @return 兩個(gè)參數(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)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 解決IDEA新建xml文件顯示為普通的text文本問題

    解決IDEA新建xml文件顯示為普通的text文本問題

    IntelliJ IDEA新建XML文件時(shí)顯示為普通文本,可以通過以下步驟解決:1.檢查項(xiàng)目文件過濾器,確保沒有隱藏XML文件類型;2.在XML文件中添加或修改文件類型關(guān)聯(lián);3.如果問題依然存在,檢查并刪除自定義的文件類型過濾器
    2024-11-11
  • Mybatis給數(shù)據(jù)庫敏感字段加解密詳解

    Mybatis給數(shù)據(jù)庫敏感字段加解密詳解

    這篇文章主要介紹了Mybatis給數(shù)據(jù)庫敏感字段加解密詳解,為了保護(hù)數(shù)據(jù)庫敏感字段數(shù)據(jù)安全,有時(shí)候我們需要將敏感數(shù)據(jù)加密入庫,查詢時(shí)再解密成明文,我們可以利用Mybatis自定義TypeHandler來處理,需要的朋友可以參考下
    2023-11-11
  • Java SMM框架關(guān)聯(lián)關(guān)系映射示例講解

    Java SMM框架關(guān)聯(lián)關(guān)系映射示例講解

    SSM框架是spring MVC ,spring和mybatis框架的整合,是標(biāo)準(zhǔn)的MVC模式,將整個(gè)系統(tǒng)劃分為表現(xiàn)層,controller層,service層,DAO層四層,使用spring MVC負(fù)責(zé)請求的轉(zhuǎn)發(fā)和視圖管理,spring實(shí)現(xiàn)業(yè)務(wù)對(duì)象管理,mybatis作為數(shù)據(jù)對(duì)象的持久化引擎
    2022-08-08
  • Java 如何判斷Integer類型的值是否相等

    Java 如何判斷Integer類型的值是否相等

    這篇文章主要介紹了Java 如何判斷Integer類型的值是否相等操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • springboot接入cachecloud redis示例實(shí)踐

    springboot接入cachecloud redis示例實(shí)踐

    這篇文章主要介紹了springboot接入cachecloud redis示例實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 關(guān)于spring的自定義緩存注解分析

    關(guān)于spring的自定義緩存注解分析

    這篇文章主要介紹了關(guān)于spring的自定義緩存注解分析,因?yàn)樗械膋ey的失效時(shí)間都一樣,要想實(shí)現(xiàn)不同的key不同的失效時(shí)間,就得需要自定義緩存注解,需要的朋友可以參考下
    2023-05-05
  • Serializable接口的作用_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Serializable接口的作用_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了java中Serializable接口的作用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Spring?Boot整合持久層之JPA多數(shù)據(jù)源

    Spring?Boot整合持久層之JPA多數(shù)據(jù)源

    JPA(Java Persistence API)Java 持久化 API,是 Java 持久化的標(biāo)準(zhǔn)規(guī)范,Hibernate 是持久化規(guī)范的技術(shù)實(shí)現(xiàn),而 Spring Data JPA 是在 Hibernate 基礎(chǔ)上封裝的一款框架
    2022-08-08
  • Java計(jì)算器核心算法代碼實(shí)現(xiàn)

    Java計(jì)算器核心算法代碼實(shí)現(xiàn)

    今天小編就為大家分享一篇關(guān)于Java計(jì)算器核心算法代碼實(shí)現(xiàn),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • java微信開發(fā)API第四步 微信自定義個(gè)性化菜單實(shí)現(xiàn)

    java微信開發(fā)API第四步 微信自定義個(gè)性化菜單實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了java微信開發(fā)API第四步,自定義菜單以及個(gè)性化菜單實(shí)現(xiàn) ,感興趣的小伙伴們可以參考一下
    2016-06-06

最新評(píng)論

桓台县| 普洱| 阆中市| 承德市| 济阳县| 遂平县| 灵寿县| 抚远县| 松阳县| 磐石市| 溧水县| 社旗县| 西华县| 蒲江县| 河源市| 朝阳县| 桂阳县| 通山县| 内黄县| 冕宁县| 习水县| 南溪县| 应城市| 勐海县| 霍城县| 介休市| 大方县| 兴宁市| 获嘉县| 武义县| 宁阳县| 南岸区| 璧山县| 德州市| 库伦旗| 阿克苏市| 栾城县| 北海市| 崇阳县| 濉溪县| 金平|