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

本文介绍了一种在Java中进行高精度数值计算的方法,利用BigDecimal类解决了浮点数运算不精确的问题。文章提供了加法、减法、乘法、除法及四舍五入等常用计算方法的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在日常开放当中需要我们计算数字,利率。通常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();
		}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值