首页 > 其他分享 >BigDecimal加减乘除运算整合工具类

BigDecimal加减乘除运算整合工具类

时间:2023-02-10 09:22:24浏览次数:46  
标签:return 运算 param v1 v2 String 加减乘除 BigDecimal

//自定义工具类
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);
}

标签:return,运算,param,v1,v2,String,加减乘除,BigDecimal
From: https://www.cnblogs.com/dengdo/p/17107787.html

相关文章

  • 运算符
    前面我们熟悉了如何表示数据,接下来我们学习如何处理数据。C语言为处理数据提供了大量的操作,可以在程序中进行算术运算、比较值的大小、修改变量、逻辑的组合关系等。1.基本......
  • Python 5.垃圾回收机制与运算符
    一、垃圾回收机制1.定义垃圾回收机制(简称GC)是Python解释器自带一种机,专门用来回收不可用的变量值所占用的内存空间。 2.为什么要有垃圾回收机制程序运行过程......
  • 3.3计算机运算出错的原因
       计算机之所以会出现运算错误,是因为“有一些十进制数的小数无法转换成二进制数”。图3-2中,小数点后4位用二进制数表示时的数值范围为0.0000~0.1111。因此,这里只能......
  • 第一阶段第四章运算符
    第四章 算数运算符  运算代码:publicclassArithmeticOperators{ publicstaticvoidmain(String[]args){ inti=10/4;//数学中得2.5java中得2 doubled......
  • 运算符与JavaDoc
    运算符Java语言支持如下运算符:算术运算符:+,-,,/,%,++,--short和byte运算会转化为int%:取余、模运算a%b++--:自增,自减(一元运算)inta=3;......
  • Java基础知识点(键盘录入、算术运算符、类型转换)
    一:键盘录入Java帮我们写好一个类叫Scanner,这个类这个类就可以接收键盘输入的内容步骤一:导包——Scanner这个类在哪(导包必须出现在类定义的上面)importjava.util.Scanner;步......
  • 2.3移位运算和乘除运算的关系
       和十进制数一样,四则运算同样也可以使用在二进制数中,只要注意逢2进位即可。   移位运算指的是将二进制数值的各数位进行左右移位(shif=移位)的运算。移位有......
  • 运算符
    运算符Java语言支持如下运算符:算数运算符:+,-,*,/,%,++,--赋值运算符:=关系运算符:>,<,>=,<=,==,!=,instanceof逻辑运算符:&&,||,!位运算符:&,|,^,~,>>,<<,>>>条件运算符:?:扩展运算符:+=,-=,*=......
  • 使用BigDecimal进行运算
    packagecom.demo;/***Createdby莫文龙on2018/3/28.*/importjava.math.BigDecimal;publicclassDemo10{publicstaticvoidmain(String[]args){//......
  • JS新运算符 ?. ?? ??= ||= &&= 的含义及用法
    ?.可选链操作符可选链允许读取连接对象链深处的属性值而不必明确验证链中每个引用是否有效。该表达式短路返回值语法:obj?.propobj?.[expr]arr?.[index]func......