亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java使用BigDecimal進行運算封裝的實際案例

 更新時間:2018年12月08日 11:38:57   作者:執(zhí)筆記憶的空白  
今天小編就為大家分享一篇關(guān)于Java使用BigDecimal進行運算封裝的實際案例,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧

日常對于金額計算,應該都是用的BigDecimal,可是苦于沒有好的工具類方法,現(xiàn)在貢獻一個我正在用的對于數(shù)字計算的工具類,項目中就是用的這個,簡單粗暴好用,話不多說,代碼奉上(該工具類需要引入google的一個jar,com.google.common.base.Optional,具體maven引入看文章末尾):

import java.math.BigDecimal;
public class NumberArithmeticUtils {
 /**
 * BigDecimal的加法運算封裝
 * @param b1
 * @param bn
 * @return
 */
 public static BigDecimal safeAdd(BigDecimal b1, BigDecimal... bn) {
 if (null == b1) {
  b1 = BigDecimal.ZERO;
 }
 if (null != bn) {
  for (BigDecimal b : bn) {
  b1 = b1.add(null == b ? BigDecimal.ZERO : b);
  }
 }
 return b1;
 }
 /**
 * Integer加法運算的封裝
 * @param b1 第一個數(shù)
 * @param bn 需要加的加法數(shù)組
 * @注 : Optional 是屬于com.google.common.base.Optional<T> 下面的class
 * @return
 */
 public static Integer safeAdd(Integer b1, Integer... bn) {
 if (null == b1) {
  b1 = 0;
 }
 Integer r = b1;
 if (null != bn) {
  for (Integer b : bn) {
  r += Optional.fromNullable(b).or(0);
  }
 }
 return r > 0 ? r : 0;
 }
 /**
 * 計算金額方法
 * @param b1
 * @param bn
 * @return
 */
 public static BigDecimal safeSubtract(BigDecimal b1, BigDecimal... bn) {
 return safeSubtract(true, b1, bn);
 }
 /**
 * BigDecimal的安全減法運算
 * @param isZero 減法結(jié)果為負數(shù)時是否返回0,true是返回0(金額計算時使用),false是返回負數(shù)結(jié)果
 * @param b1 被減數(shù)
 * @param bn 需要減的減數(shù)數(shù)組
 * @return
 */
 public static BigDecimal safeSubtract(Boolean isZero, BigDecimal b1, BigDecimal... bn) {
 if (null == b1) {
  b1 = BigDecimal.ZERO;
 }
 BigDecimal r = b1;
 if (null != bn) {
  for (BigDecimal b : bn) {
  r = r.subtract((null == b ? BigDecimal.ZERO : b));
  }
 }
 return isZero ? (r.compareTo(BigDecimal.ZERO) == -1 ? BigDecimal.ZERO : r) : r;
 }
 /**
 * 整型的減法運算,小于0時返回0
 * @param b1
 * @param bn
 * @return
 */
 public static Integer safeSubtract(Integer b1, Integer... bn) {
 if (null == b1) {
  b1 = 0;
 }
 Integer r = b1;
 if (null != bn) {
  for (Integer b : bn) {
  r -= Optional.fromNullable(b).or(0);
  }
 }
 return null != r && r > 0 ? r : 0;
 }
 /**
 * 金額除法計算,返回2位小數(shù)(具體的返回多少位大家自己看著改吧)
 * @param b1
 * @param b2
 * @return
 */
 public static <T extends Number> BigDecimal safeDivide(T b1, T b2){
 return safeDivide(b1, b2, BigDecimal.ZERO);
 }
 /**
 * BigDecimal的除法運算封裝,如果除數(shù)或者被除數(shù)為0,返回默認值
 * 默認返回小數(shù)位后2位,用于金額計算
 * @param b1
 * @param b2
 * @param defaultValue
 * @return
 */
 public static <T extends Number> BigDecimal safeDivide(T b1, T b2, BigDecimal defaultValue) {
 if (null == b1 || null == b2) {
  return defaultValue;
 }
 try {
  return BigDecimal.valueOf(b1.doubleValue()).divide(BigDecimal.valueOf(b2.doubleValue()), 2, BigDecimal.ROUND_HALF_UP);
 } catch (Exception e) {
  return defaultValue;
 }
 }
 /**
 * BigDecimal的乘法運算封裝
 * @param b1
 * @param b2
 * @return
 */
 public static <T extends Number> BigDecimal safeMultiply(T b1, T b2) {
 if (null == b1 || null == b2) {
  return BigDecimal.ZERO;
 }
 return BigDecimal.valueOf(b1.doubleValue()).multiply(BigDecimal.valueOf(b2.doubleValue())).setScale(2, BigDecimal.ROUND_HALF_UP);
 }
}

Optional所在的jar以及版本:guava-18.0.ar

pom.xml配置:

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
 <groupId>com.google.guava</groupId>
 <artifactId>guava</artifactId>
 <version>18.0</version>
</dependency>

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • Spring實例化bean的方式代碼詳解

    Spring實例化bean的方式代碼詳解

    這篇文章主要介紹了Spring實例化bean的方式代碼詳解,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • springboot整合redis修改分區(qū)的操作流程

    springboot整合redis修改分區(qū)的操作流程

    這篇文章主要介紹了springboot整合redis修改分區(qū)的操作流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Springboot使用kafka的兩種方式

    Springboot使用kafka的兩種方式

    在公司用kafka比較多,今天整理下Springboot使用kafka的兩種方式,Kafka作為一個消息發(fā)布訂閱系統(tǒng),就包括消息生成者和消息消費者,文中通過代碼示例介紹的非常詳細,具有一定的參考價值,需要的朋友可以參考下
    2023-11-11
  • Java中Thread類的使用和它的屬性

    Java中Thread類的使用和它的屬性

    在java中可以進行多線程編程,在java標準庫中提供了一個Thread類,來表示線程操作,本文主要介紹了Java中Thread類的使用和它的屬性,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • SpringBoot配置SSL同時支持http和https訪問實現(xiàn)

    SpringBoot配置SSL同時支持http和https訪問實現(xiàn)

    本文主要介紹了SpringBoot配置SSL同時支持http和https訪問實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07
  • 基于Java隨機生成手機短信驗證碼的實例代碼

    基于Java隨機生成手機短信驗證碼的實例代碼

    這篇文章主要介紹了Java隨機生成手機短信驗證碼的實例代碼,代碼分為哦簡單版和復雜版,需要的朋友可以參考下
    2019-04-04
  • IDEA使用SequenceDiagram插件繪制時序圖的方法

    IDEA使用SequenceDiagram插件繪制時序圖的方法

    這篇文章主要介紹了IDEA使用SequenceDiagram插件繪制時序圖的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-09-09
  • Java實現(xiàn)的權(quán)重算法(按權(quán)重展現(xiàn)廣告)

    Java實現(xiàn)的權(quán)重算法(按權(quán)重展現(xiàn)廣告)

    這篇文章主要介紹了Java實現(xiàn)的權(quán)重算法(按權(quán)重展現(xiàn)廣告),本文講解了算法實現(xiàn)原理和實現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04
  • Spring之@Aspect中通知的5種方式詳解

    Spring之@Aspect中通知的5種方式詳解

    本文主要介紹了Spring之@Aspect中通知的5種方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-05-05
  • java并發(fā)學習之BlockingQueue實現(xiàn)生產(chǎn)者消費者詳解

    java并發(fā)學習之BlockingQueue實現(xiàn)生產(chǎn)者消費者詳解

    這篇文章主要介紹了java并發(fā)學習之BlockingQueue實現(xiàn)生產(chǎn)者消費者詳解,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11

最新評論