BigDecimal的精度问题以及BigDecimal的加减乘除运算

BigDecimal的精度问题以及BigDecimal的加减乘除运算

1.先说BigDecimal 的加减乘除运算

​ 1).加法

(示例)
	  //定义 bigdecimal 类型数 numOne 其值大小为10
       BigDecimal numOne = new BigDecimal("10");

        //定义 bigdecimal 类型数 numTwo 其值大小为20
        BigDecimal numTwo = new BigDecimal("20");

        //此处为加法计算
        BigDecimal sum = numOne.add(numTwo);

        //将结果转为double类型
        double sumDoubleValue = sum.doubleValue();

        //将结果转为int类型  除此之外 还有long类型  float类型 ...
        long sumIntvalue = sum.longValue();

        System.out.println(sumDoubleValue);
        System.out.println(sumIntvalue);

​ 2)减法

 		//定义 bigdecimal 类型数 numSubtractOne 其值大小为10
        BigDecimal numSubtractOne = new BigDecimal("10");

        //定义 bigdecimal 类型数 numSubtractTwo 其值大小为20
        BigDecimal numSubtractTwo = new BigDecimal("20");

        //减法计算
        BigDecimal subtractValue = numSubtractOne.subtract(numSubtractTwo);

		//控制输出 double 类型的结果
        System.out.println(subtractValue.doubleValue());

3)乘法

        //定义 bigdecimal 类型数 numMultityOne 其值大小为10
        BigDecimal numMultiplyOne =  new BigDecimal("10");

        //定义 bigdecimal 类型数 numMultityTwo 其值大小为20
        BigDecimal numMultiplyTwo = new BigDecimal("20");

        //乘法结果
        BigDecimal multiplyValue = numMultiplyOne.multiply(numMultiplyTwo);

        //控制台输出结果
        System.out.println(multiplyValue.doubleValue());

4)除法

        //定义 bigdecimal 类型数 numDivideOne 其值大小为10
        BigDecimal numDivideOne =  new BigDecimal("10");

        //定义 bigdecimal 类型数 numDivideTwo 其值大小为20
        BigDecimal numDivideTwo = new BigDecimal("20");

        //除法结果
        BigDecimal divide = numDivideOne.divide(numDivideTwo);

        //控制台输出结果
        System.out.println(divide.doubleValue());

2.BigDecimal的精度问题

​ 对于BigDecimal 的精度保留需要用到DecimalFormat模板 先看示例:

(示例)
		//小数点后保留两位,整数位没有数据保留0
        DecimalFormat tamplet = new DecimalFormat("0.00");

        //想要处理小数点的数据
        double numDoubleValue = 5.511651616;

        //小数点后保留两位后的数据
        String value = tamplet.format(numDoubleValue);
        
        //此处将string类型转换为你想要的类型 比如 double 
        Double aDoubleValue = Convert.toDouble(value);
        //输出打印
        System.out.println(aDoubleValue);

对于模板除了"0.00"之外还有很多

例如:"#.00" ,“00.00”,“0.000”…

“#.00”:
表示小数后保留两位,个位如果没有值就忽略.举个例子当你对 0.233 使用这个模板时,那么输出的结果就是".23" 个位的0不见了,那是因为 # 的缘故.如果个位的数值没有时会被忽略掉.

但"0.00"
这个模板就是个位的数值没有时补0.使用这个模板对0.233进行小数处理时,那么输出的结果就是"0.23",可见0的作用是放在某一个数位上,当这个数位没有数值时会补0

假如 我们用"00.000"这个模板对 1.22 这个数进行处理.那么输出的结果就是 “01.220”

以上可以总结出
0是用于补 0 操作.当模板小数后有几个0 那么就相当于保留几位数字.

#可理解为占位 当有数值时就显示,没有数值时就忽略.但只能放小数的末尾或者整数的最高位

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BigDecimalJava 中用于处理精度问题的类,但是在进行加减乘除运算时,也需要注意精度问题。 1. 加减法精度问题 在进行 BigDecimal 的加减法运算时,需要注意两个 BigDecimal 对象的精度是否相同。如果两个 BigDecimal 对象的精度不同,那么结果的精度可能会有误差。 例如,假设有两个 BigDecimal 对象: BigDecimal a = new BigDecimal("10.123456789"); BigDecimal b = new BigDecimal("0.000000001"); 如果对它们进行加法运算,结果应该是 10.123456790。但是,如果直接使用 a.add(b),会得到一个不精确的结果: BigDecimal c = a.add(b); // 结果可能是 10.123456789 这是因为 a 和 b 的精度不同,导致加法运算时精度丢失。解决方法是将两个 BigDecimal 对象的精度都设置为相同的值,如下所示: BigDecimal a = new BigDecimal("10.123456789").setScale(9, RoundingMode.HALF_UP); BigDecimal b = new BigDecimal("0.000000001").setScale(9, RoundingMode.HALF_UP); BigDecimal c = a.add(b); // 结果为 10.123456790 在这里,使用了 setScale 方法将 a 和 b 的精度都设置为 9,同时使用了 RoundingMode.HALF_UP 舍入模式来保证精度。 2. 乘除法精度问题 在进行 BigDecimal 的乘除法运算时,也可能会出现精度问题。例如,假设有两个 BigDecimal 对象: BigDecimal a = new BigDecimal("10.0"); BigDecimal b = new BigDecimal("3.0"); 如果对它们进行除法运算,结果应该是 3.3333333333。但是,如果直接使用 a.divide(b),会得到一个不精确的结果: BigDecimal c = a.divide(b); // 结果可能是 3.333333333 这是因为 BigDecimal 的除法运算默认是保留整数部分,精度有可能丢失。解决方法是使用重载的 divide 方法,指定要保留的小数位数和舍入模式,如下所示: BigDecimal c = a.divide(b, 10, RoundingMode.HALF_UP); // 结果为 3.3333333333 在这里,使用了保留 10 位小数和 RoundingMode.HALF_UP 舍入模式来保证精度。乘法运算也可以使用 setScale 方法来设置精度

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值