使用计算类BigDecimal写一个精确计算工具类

在日常开放当中需要我们计算数字,利率。通常Java的做法是使用Math相关的API。但是,这样做是不够精确的,由于float和double不能进行计算,如果强行进行计算会使得计算不准确。造成难以挽回的损失。为了弥补这一个缺点Java提供了BigDecimal这个类来解决。在使用这个类的时候需要将double转成String进行计算。为了方便,下面我写了几个常用的计算方法,当然也可以自己增加。

import java.math.BigDecimal;
//精确计算工具类
public class CalculateUtils {

	//加法
	public static double add(double var1,double var2){
		BigDecimal b1=new BigDecimal(Double.toString(var1));
		BigDecimal b2=new BigDecimal(Double.toString(var2));
		return b1.add(b2).doubleValue();
	}
	//减法
	public static double sub(double var1,double var2){
		BigDecimal b1=new BigDecimal(Double.toString(var1));
		BigDecimal b2=new BigDecimal(Double.toString(var2));
		return b1.subtract(b2).doubleValue();
	}
	//乘法
	public static double mul(double var1,double var2){
		BigDecimal b1=new BigDecimal(Double.toString(var1));
		BigDecimal b2=new BigDecimal(Double.toString(var2));
		return b1.multiply(b2).doubleValue();
	}
	//除法,scale为精确到小数后的位数
		public static double div(double var1,double var2,int scale){
			if(scale<0){
				throw new IllegalArgumentException("The scale must be a positive integer or zero! ");
			}
			BigDecimal b1=new BigDecimal(Double.toString(var1));
			BigDecimal b2=new BigDecimal(Double.toString(var2));
			return b1.divide(b2,scale, BigDecimal.ROUND_HALF_UP).doubleValue();
		}
		//四舍五入,scale为精确到小数后的位数
		public static double  round(double v,int scale){
			if(scale<0){
				throw new IllegalArgumentException("The scale must be a positive integer  or zero! ");
			}
			BigDecimal b=new BigDecimal(Double.toString(v));
		    BigDecimal one = new BigDecimal("1");
		    return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
		}
}

猜你喜欢

转载自blog.csdn.net/cc1969281777/article/details/83932432