Java使用BigDecimal进行运算封装的实际案例

  • 更新时间:2022-07-06 22:17:48
  • 编辑:朱欣怡
给网友朋友们带来一篇Java相关的编程文章,网友逢吟怀根据主题投稿了本篇教程内容,涉及到java、bigdecimal工具类、bigdecimal运算封装、java使用bigdecimal进行运算封装相关内容,已被331网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。
java班主任管理系统源码(带数据)
java班主任管理系统源码(带数据)
  • 大小:3.84 MB
  • 发布人:隆乐音
  • 下载:java源码

日常对于金额计算,应该都是用的BigDecimal,可是苦于没有好的工具类方法,现在贡献一个我正在用的对于数字计算的工具类,项目中就是用的这个,简单粗暴好用,话不多说,代码奉上(该工具类需要引入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 第一个数
 * @param bn 需要加的加法数组
 * @注 : 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 减法结果为负数时是否返回0,true是返回0(金额计算时使用),false是返回负数结果
 * @param b1 被减数
 * @param bn 需要减的减数数组
 * @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位小数(具体的返回多少位大家自己看着改吧)
 * @param b1
 * @param b2
 * @return
 */
 public static <T extends Number> BigDecimal safeDivide(T b1, T b2){
 return safeDivide(b1, b2, BigDecimal.ZERO);
 }
 /**
 * BigDecimal的除法运算封装,如果除数或者被除数为0,返回默认值
 * 默认返回小数位后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>

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对java学习网的支持。如果你想了解更多相关内容请查看下面相关链接

相关下载

  • Java核心技术 卷II 高级特性(第11版)

    大小:251 MB
  • 软件项目开发全程实录:Java项目开发全程实录(第3版)

    大小:22.4 MB
  • Scala与Clojure函数式编程模式:Java虚拟机高效编程

    大小:34 MB
  • Java程序设计教程

    大小:1.18 MB
  • Selenium3自动化测试:基于java学习手册

    大小:5.65 MB

相关教程

  • java实现highcharts导出图片至excel实例方法

    java实现highcharts导出图片至excel实例方法

    给网友朋友们带来一篇关于java的教程,这篇文章主要介绍了如何通过java实现highcharts导出图片至excel。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面我们就来一起学习一下吧

    发布时间:2022-06-14如何通过java实现highcharts导出图片至excel

  • Java使用备忘录模式实现过关类游戏功能详解

    Java使用备忘录模式实现过关类游戏功能详解

    给大家整理一篇关于Java的教程,这篇文章主要介绍了Java使用备忘录模式实现过关类游戏功能,结合实例形式详细分析了java备忘录模式的概念、原理及其在过关类游戏中的具体应用方法,需要的朋友可以参考下

    发布时间:2022-06-19

  • JNDI在JavaEE中的角色_动力节点Java学院整理

    给大家整理一篇关于JavaEE的教程,这篇文章主要介绍了JNDI在JavaEE中的角色,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    发布时间:2022-07-01

  • Java注解实现动态数据源切换的实例代码

    给大家整理了关于Java的教程,本篇文章主要介绍了Java注解实现动态数据源切换的实例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    发布时间:2022-06-27

  • Java后台实现浏览器一键导出下载zip压缩包

    给网友们整理关于Java的教程,这篇文章主要为大家详细介绍了Java后台实现浏览器一键导出下载zip压缩包,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2022-06-12

  • Java实现贪吃蛇游戏的示例

    Java实现贪吃蛇游戏的示例

    给网友们整理关于Java的教程,这篇文章主要介绍了Java 如何实现贪吃蛇游戏,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下

    发布时间:2022-06-19Java 贪吃蛇

  • 浅析java中的取整(/)和求余(%)

    给大家整理一篇关于java的教程,这篇文章主要介绍了浅析java中的取整(/)和求余(%),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    发布时间:2022-06-15

  • 实例总结Java多线程编程的方法

    给大家整理了关于Java的教程,在本篇文章里我们给大家总结了Java多线程编程的方法以及相关实例代码,需要的朋友们可以学习下。

    发布时间:2022-06-14

  • 一起来了解Java的策略模式

    一起来了解Java的策略模式

    给大家整理了关于Java的教程,这篇文章主要为大家详细介绍了Java的策略模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

    发布时间:2022-06-10Java策略模式

用户留言