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

Java使用BigDecimal進(jìn)行運(yùn)算封裝的實(shí)際案例

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

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

import java.math.BigDecimal;
public class NumberArithmeticUtils {
 /**
 * BigDecimal的加法運(yùn)算封裝
 * @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加法運(yùn)算的封裝
 * @param b1 第一個(gè)數(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;
 }
 /**
 * 計(jì)算金額方法
 * @param b1
 * @param bn
 * @return
 */
 public static BigDecimal safeSubtract(BigDecimal b1, BigDecimal... bn) {
 return safeSubtract(true, b1, bn);
 }
 /**
 * BigDecimal的安全減法運(yùn)算
 * @param isZero 減法結(jié)果為負(fù)數(shù)時(shí)是否返回0,true是返回0(金額計(jì)算時(shí)使用),false是返回負(fù)數(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;
 }
 /**
 * 整型的減法運(yùn)算,小于0時(shí)返回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;
 }
 /**
 * 金額除法計(jì)算,返回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的除法運(yùn)算封裝,如果除數(shù)或者被除數(shù)為0,返回默認(rèn)值
 * 默認(rèn)返回小數(shù)位后2位,用于金額計(jì)算
 * @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的乘法運(yùn)算封裝
 * @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é)

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

相關(guān)文章

最新評(píng)論

海口市| 南陵县| 雷山县| 轮台县| 滨海县| 宁都县| 明光市| 如东县| 辽阳市| 西丰县| 通化市| 鄂托克前旗| 商都县| 和田县| 当雄县| 田阳县| 芜湖县| 永济市| 巴青县| 肇庆市| 高台县| 黄大仙区| 历史| 宽甸| 宁明县| 兰西县| 蓝田县| 安远县| 隆德县| 修武县| 义乌市| 腾冲县| 临汾市| 财经| 南丰县| 类乌齐县| 溧阳市| 徐闻县| 手游| 靖江市| 长垣县|