package com.dem.ceshiDemo.util;
import java.math.BigDecimal;
import java.util.regex.Pattern;
/**
* 数字精度运算工具类
*/
public class NumberUtils {
/**
* 减法运算(精度)
* @param num1 被减数
* @param num2 减数
* @return 差
*
*/
public static double subtract(double num1, double num2) {
BigDecimal bignum1 = new BigDecimal(Double.toString(num1));
BigDecimal bignum2 = new BigDecimal(Double.toString(num2));
return bignum1.subtract(bignum2).doubleValue();
}
/**
* 加法运算(精度)
* @param num1
* @param num2
* @return 两个数字之和
*
*/
public static double add(double num1, double num2) {
BigDecimal bignum1 = new BigDecimal(Double.toString(num1));
BigDecimal bignum2 = new BigDecimal(Double.toString(num2));
return bignum1.add(bignum2).doubleValue();
}
/**
* 除法运算(精度)
* @param num1 被除数
* @param num2 除数
* @return 商
*
*/
public static double divide(double num1, double num2) {
BigDecimal big1 = new BigDecimal(Double.toString(num1));
BigDecimal big2 = new BigDecimal(Double.toString(num2));
return big1.divide(big2).doubleValue();
}
/**
* 除法运算(精度),并保留小数位数
* @param num1 被除数
* @param num2 除数
* @param scale 保留小数位数
* @return 商
*
*/
public static double divide(double num1, double num2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(" 截取位数必须是正整数或者零 ");
}
BigDecimal big1 = new BigDecimal(Double.toString(num1));
BigDecimal big2 = new BigDecimal(Double.toString(num2));
return big1.divide(big2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/**
* 乘法运算(精度)
* @param num1 被乘数
* @param num2 乘数
* @return 积
*
*/
public static double multiply(double num1, double num2) {
BigDecimal big1 = new BigDecimal(Double.toString(num1));
BigDecimal big2 = new BigDecimal(Double.toString(num2));
return big1.multiply(big2).doubleValue();
}
/**
* 乘法运算(精度),并保留小数位数
* @param num1 被乘数
* @param num2 乘数
* @param scale 保留小数位数
* @return 积
*
*/
public static double multiply(double num1, double num2, int scale) {
if (scale < 0) {
throw new IllegalArgumentException(" 截取位数必须是正整数或者零 ");
}
BigDecimal big1 = new BigDecimal(Double.toString(num1));
BigDecimal big2 = new BigDecimal(Double.toString(num2));
return big1.multiply(big2).setScale(scale, BigDecimal.ROUND_HALF_UP)
.doubleValue();
}
/**
* 数字取整
* @param num1 待处理的数字
* @return 去掉小数位后的数值
*
*/
public static double integer(double num1){
return Math.floor(num1);
}
/**
* 数字进行四舍五入
* @param num1 待处理的数字
* @param scale 位数
* @return 四舍五入后的数字
*
*/
public static double round(double num1, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("截取位数必须是正整数或者零 ");
}
BigDecimal b = new BigDecimal(Double.toString(num1));
return b.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
/*方法二:推荐,速度最快
* 判断是否为整数
* @param str 传入的字符串
* @return 是整数返回true,否则返回false
*/
public static boolean isInteger(String str) {
Pattern pattern = Pattern.compile("^[-\\+]?[\\d]*$");
return pattern.matcher(str).matches();
}
}
标签:运算,return,BigDecimal,num2,double,param,数字,精度,num1
From: https://www.cnblogs.com/lichangben/p/17956717