package cn.xbz.util.math;import java.math.BigDecimal;/*** @title 数学计算工具类* @description 提供常用的数值加减乘除计算 , 及多个数值的求和 , 平均值 , 最大最小值计算*/
public class XMathUtil {/** 默认的除法精确度 */private static final int DEF_DIV_SCALE = 2;/*** 精确加法运算* @param v1 被加数* @param v2 加数* @return 两个参数的和(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);}/*** 精确减法运算* @param v1 被减数* @param v2 减数* @return 两个参数的差(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);}/*** 精确乘法运算* @param v1 被乘数* @param v2 乘数* @return 两个参数的积(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);}/*** ( 相对 )精确除法运算 , 当发生除不尽情况时 , 精确到 小数点以后2位 , 以后数字四舍五入* @param v1 被除数* @param v2 除数* @return 两个参数的商(BigDecimal)*/public static BigDecimal divide(BigDecimal v1, BigDecimal v2) {return v1.divide(v2, DEF_DIV_SCALE, BigDecimal.ROUND_HALF_UP);}/*** ( 相对 )精确除法运算 . 当发生除不尽情况时 , 由scale参数指 定精度 , 以后数字四舍五入* @param v1 被除数* @param v2 除数* @param scale 表示表示需要精确到小数点以后几位* @return 两个参数的商(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("除数不能为0");}if (scale < 0) {throw new IllegalArgumentException("精确度不能小于0");}return v1.divide(v2, scale, BigDecimal.ROUND_HALF_UP);}/*** 精确加法运算* @param v1 被加数* @param v2 加数* @return 两个参数的和(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));}/*** 精确减法运算* @param v1 被减数* @param v2 减数* @return 两个参数的差(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));}/*** 精确乘法运算* @param v1 被乘数* @param v2 乘数* @return 两个参数的积(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));}/*** ( 相对 )精确除法运算 , 当发生除不尽情况时 , 精确到 小数点以后2位 , 以后数字四舍五入* @param v1 被除数* @param v2 除数* @return 两个参数的商(String)*/public static String divide(String v1, String v2) {return divide(v1, v2, DEF_DIV_SCALE);}/*** ( 相对 )精确除法运算 . 当发生除不尽情况时 , 由scale参数指 定精度 , 以后数字四舍五入* @param v1 被除数* @param v2 除数* @param scale 表示表示需要精确到小数点以后几位* @return 两个参数的商(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));}/*** 精确加法运算 , 计算多个数值总和 , 若其中有null值则忽略* @param valList 被加数集合* @return 两个参数的和(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;}/*** 精确加法运算 , 计算多个数值总和 , 若其中有null值则忽略* @param valList 被加数集合* @return 两个参数的和(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);}/*** 平均数* @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;}/*** 平均数* @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;}
}

Java数学工具类MathUtil相关推荐

  1. java 加减乘除 工具类_Java数学工具类MathUtil详解

    package cn.xbz.util.math; import java.math.BigDecimal; /** * @title 数学计算工具类 * @description 提供常用的数值加减 ...

  2. 第21天学习Java的笔记-数学工具类Arrays,Math

    27天! 数学工具类 1.1数组工具类Arrays package Demo2101;/* 注意事项:是Arrays进行调用,不是变量进行调用!!!* java.util.Arrays是一个与数组相关 ...

  3. Math数学工具类在java中如何使用?

    Math数学工具类在java中如何使用? 一.Math数学工具类是什么? 在处理业务的时候,经常遇到一些有关数学方面的计算,特别是做测绘和监测业务时,显得出现的频率及其多, JDK提供了一个Math类 ...

  4. JAVA常用工具类(实用高效)

    JAVA常用工具类(根据GITHUB代码统计) 从Google你能搜索到大量的关于Struts,Spring,Hibernate,iBatis等比较大的框架的资料,但是很少有人去关注一些小的工具包,但 ...

  5. #学习笔记#13_数学工具类Math

    数学工具类Math java.util.Math 类是数学相关的工具类,里面提供了大量的静态方法,完成与数学运算相关的操作 public static double abs(double num):获 ...

  6. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  7. Java并发工具类(闭锁CountDownLatch)

    并发工具类系列: Java并发工具类(闭锁CountDownLatch) Java并发工具类(栅栏CyclicBarrier) Java并发工具类(信号量Semaphore) 闭锁是一种同步工具类,可 ...

  8. java日期工具类DateUtil

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. DateUtil类 [java] view plain copy package com.util; ...

  9. Java常用工具类StringUtils的常用方法

    Java常用工具类StringUtils的常用方法 1.该工具类是用于操作Java.lang.String类的. 2.StringUtils类在操作字符串是安全的,不会报空指针异常,也正因此,在操作字 ...

最新文章

  1. SAP Forecasting Replenishment (SAP FR)(中英双语)
  2. linux c语言文件属性,Linux C获取文件属性
  3. MusicXML 3.0 - DTD 速查
  4. 新宝来引擎盖怎么打开
  5. cgo linux arm,Golang交叉编译各个平台的二进制文件
  6. tif文件转pdf_PPT怎么转换成PDF文件?可以帮到你的PPT转PDF方法
  7. HTML 5中的tips两则
  8. 老李分享:5个衡量软件质量的标准
  9. 中国移动计算机类行测题目,2021三大运营商春招笔试:中国移动行测练习题(2)...
  10. 智渔课堂官方免费教程二十六:Java基础教程之数组
  11. oracle primavera p6 破解版,P6项目管理软件下载 Primavera P6 Professional(项目管理软件) 16.1 免费安装版(附安装教程) 下载-脚本之家...
  12. Nodejs异步回调的优雅处理方法
  13. html锚点定位向下偏移,html锚点定位不准确问题
  14. 纯HTML写国际象棋棋盘
  15. linux探索之旅pdf,【Linux探索之旅】第四部分第一課:壓縮文件,解壓無壓力
  16. Linux-4.20.8内核桥收包源码解析(一)----------sk_buff(详细)
  17. Http长连接、短连接、持久连接这三个概念的分析总结
  18. 传智博客(JavaWeb方面的所有知识)听课记录(经典)
  19. Dockerfile 简介
  20. oracle prompt出错,Oracle 用 sqlprompt 修改 sqlplus 提示符

热门文章

  1. python征程1.4(初识python)
  2. 信息安全系统设计基础第四周学习总结—20135227黄晓妍
  3. 入门机器学习(七)--神经网络
  4. OpenCV3学习(5.1)——图像变换之缩放、金字塔、仿射、透射
  5. 2013递归求解单链表中的结点个数(C++,附递归函数思路讲解与手绘图)
  6. 6-7 jmu-Java-07多线程-Thread (3分)
  7. js生成批次号_一文知晓MES系统中的批次管控功能
  8. html与css重置代码,发个自己的CSS重置基础代码
  9. IP计算机取证,计算机取证1资料.doc
  10. 计算机信息技术基础学的是什么内容,计算机信息技术基础练习题及答案(许骏)...