您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)如何在Java中使用BigDecimal進(jìn)行運(yùn)算封裝,小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
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>
以上就是如何在Java中使用BigDecimal進(jìn)行運(yùn)算封裝,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見到或用到的。希望你能通過這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。