double之间的加减乘除运算不能直接进行,需要运用BigDecimal进行转换。

    double类型之间的运算不能直接使用Double来直接进行运算:因为计算机是二进制的。浮点数没有办法是用二进制进行精确表示。我们的CPU表示浮点数由两个部分组成:指数和尾数,这样的表示方法一般都会失去一定的精确度,有些浮点数运算也会产生一定的误差。

    在大多数的商业计算中,一般采用java.math.BigDecimal类来进行精确计算。

    在使用BigDecimal类来进行计算的时候,主要分为以下步骤:

     1、用float或者double变量构建BigDecimal对象。

     2、通过调用BigDecimal的加,减,乘,除等相应的方法进行算术运算。

     3、把BigDecimal对象转换成float,double,int等类型。

    进行相应的计算后,我们可能需要将BigDecimal对象转换成相应的基本数据类型的变量,可以使用floatValue(),doubleValue()等方法。

    下面是一个工具类,该工具类提供加,减,乘,除运算。

public class Arith {
    public  static double add(double v1,double v2){  
            BigDecimal b1 = new BigDecimal(Double.toString(v1));  
            BigDecimal b2 = new BigDecimal(Double.toString(v2));  
            return b1.add(b2).doubleValue();  

        }  

    // 进行减法运算
    public static double sub(double v1,double v2){
            BigDecimal b1 = new BigDecimal(Double.toString(v1));  
            BigDecimal b2 = new BigDecimal(Double.toString(v2));  
            return b1.subtract(b2).doubleValue();  

        }

    // 进行加法运算
    public static double mul(double d1, double d2){        // 进行乘法运算
             BigDecimal b1 = new BigDecimal(d1);
             BigDecimal b2 = new BigDecimal(d2);
            return b1.multiply(b2).doubleValue();

         }

    // 进行除法运算
    public static  double div(double d1,double d2,int len) {// 进行除法运算
             BigDecimal b1 = new BigDecimal(d1);
             BigDecimal b2 = new BigDecimal(d2);
            return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue();

         }

    // 进行四舍五入操作
        public  double round(double d,int len) {     // 进行四舍五入操作
             BigDecimal b1 = new BigDecimal(d);
             BigDecimal b2 = new BigDecimal(1);
            // 任何一个数字除以1都是原数字
            // ROUND_HALF_UP是BigDecimal的一个常量,表示进行四舍五入的操作
            return b1.divide(b2, len,BigDecimal.ROUND_HALF_UP).doubleValue();
         } 
}

示例:

public static void main(String[] args) throws IllegalAccessException {
		// TODO Auto-generated method stub
		double a = 1.0;
		double b = 0.3;
		double c = a-b;
		System.out.println(c);
		System.out.println("-------------");
		System.out.println(a+"和"+b+"相减:"+ Arith.sub(a, b));
		System.out.println(a+"和"+b+"相加:"+ Arith.add(a, b));
		System.out.println(a+"和"+b+"相乘:"+ Arith.mul(a, b));
		System.out.println(a+"和"+b+"相除:"+ Arith.div(a,b,3));
		
//		System.out.println(div(1.0,0.3, 3));
	}

结果输出为:



  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值