栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

常用API之BigDecimal类的使用(学习Java第16天)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

常用API之BigDecimal类的使用(学习Java第16天)

目录

BigDecimal类的概述

BigDecimal类构造方法

BigDecimal类常用方法

除法保留三位小数代码实例

除法保留三位有效数字代码实例 

乘法保留两位小数

乘法保留两位有效数字



BigDecimal类的概述

使用基本类型做浮点数运算精度问题

看程序说结果:

public static void main(String[] args) {
      // 小数运算精度问题:
      System.out.println(0.09 + 0.01);
    //  期望:0.10    很遗憾,结果并不是期望值,而是一个无限趋近期望值的小数
      System.out.println(1.0 - 0.32);
    //   期望:0.68    很遗憾,结果并不是期望值,而是一个无限趋近期望值的小数
     System.out.println(1.015 * 100);
    //  期望:101.5    很遗憾,结果并不是期望值,而是一个无限趋近期望值的小数
     System.out.println(1.301 / 100);
    //  期望:0.01301    很遗憾,结果并不是期望值,而是一个无限趋近期望值的小数
}

对于浮点运算,不要使用基本类型,而使用"BigDecimal类"类型

java.math.BigDecimal(类):提供了更加精准的数据计算方式。

BigDecimal类构造方法

 注意:推荐使用第二种方式,第一种存在精度问题

    // 构造方法
    private static void method01() {
        // 创建BigDecimal对象
        BigDecimal b1 = new BigDecimal("0.09");
        BigDecimal b2 = new BigDecimal("0.01");

        System.out.println(b1.add(b2));//  0.10 没有精度问题

        // 创建BigDecimal对象
        // BigDecimal b1 = new BigDecimal(0.09);
        // BigDecimal b2 = new BigDecimal(0.01);

        // 由此可发现使用BigDecimal(double val)创建出来的对象,发生数学运算还是有精度问题
        // System.out.println(b1.add(b2));
        // 0.09999999999999999687749774324174723005853593349456787109375
    }

BigDecimal类常用方法

BigDecimal类中使用最多的还是提供的进行四则运算的方法,如下:

 注意:对于divide方法来说,如果除不尽的话,就会出现java.lang.ArithmeticException异常。此时可以使用divide方法的另一个重载方法;

BigDecimal divide(BigDecimal divisor, int scale, RoundingMode roundingMode): divisor:除数对应的BigDecimal对象;scale:精确的位数;roundingMode取舍模式

 RoundingMode枚举: RoundingMode.HALF_UP 四舍五入

public class Test {
    public static void main(String[] args) {
        // 加法:
        // 创建BigDecimal对象
        BigDecimal b1 = new BigDecimal("0.09");
        BigDecimal b2 = new BigDecimal("0.01");

        BigDecimal res1 = b1.add(b2);
        System.out.println(res1);// 0.10

        System.out.println("===========================");

        // 减法:
        // 创建BigDecimal对象
        BigDecimal b3 = new BigDecimal("1.0");
        BigDecimal b4 = new BigDecimal("0.32");

        BigDecimal res2 = b3.subtract(b4);
        System.out.println(res2);// 0.68

        System.out.println("===========================");

        // 乘法:
        // 创建BigDecimal对象
        BigDecimal b5 = new BigDecimal("1.015");
        BigDecimal b6 = new BigDecimal("100");

        BigDecimal res3 = b5.multiply(b6);
        System.out.println(res3);// 101.500

        System.out.println("===========================");

        // 除法:
        // 创建BigDecimal对象
        BigDecimal b7 = new BigDecimal("1.301");
        BigDecimal b8 = new BigDecimal("100");

        BigDecimal res4 = b7.divide(b8);
        System.out.println(res4);// 0.01301
    }
}


// BigDecimal类的注意事项:
public class Test2 {
    public static void main(String[] args) {
        // 创建BigDecimal对象
        BigDecimal b1 = new BigDecimal("10");
        BigDecimal b2 = new BigDecimal("3");

        //BigDecimal res = b1.divide(b2);// 报ArithmeticException运算异常
        BigDecimal res = b1.divide(b2, 2, RoundingMode.HALF_UP);
        System.out.println(res);// 3.33
    }
}

除法保留三位小数代码实例
        BigDecimal b1=new BigDecimal("1.302");
       BigDecimal b2=new BigDecimal("0.013");


        //保留三位小数             
        BigDecimal divide = b1.divide(b2, 3, BigDecimal.ROUND_HALF_UP);
        System.out.println(divide);

除法保留三位有效数字代码实例 
BigDecimal divide1 = b1.divide(b2, new MathContext(3));
        System.out.println(divide1);


乘法保留两位小数
        BigDecimal b1 = new BigDecimal("12.221");
        BigDecimal b2 = new BigDecimal("1.21");
        BigDecimal m1 = b1.multiply(b2);
        BigDecimal bigDecimal1 = m1.setScale(2, RoundingMode.HALF_UP);
        System.out.println(bigDecimal1);

乘法保留两位有效数字
        System.out.println(b1.multiply(b2, new MathContext(2)));

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703622.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号