• BigInteger和BigDecimal


    BigInteger

    BigInteger的作用是对整数做计算,一般的使用String类型初始化BigInteger,它除了封装了基本的加减乘除运算外还提供了signum(),abs()等函数,使用方式基本为创建两个BigInteger进行运算例如A_BigInteger.add(B_BigInteger)对两个数进行加法运算,结果还是一个BigInteger。然后它的作用远远不止于此,Java的八种数据类型整数精度最大的是Long,如果计算值超过了Long.Max_Value就会损失精度。使用BigInteger则完全可以避免。两个BigInteger的结果可以通过终止函数获取结果,例如intValue()将结果转换位int值,但是这里需要注意,如果结果已经超过了目标结果类型的精度则会不准确,最好的方式是通过.toString()函数获取一个字符串的值,这样即使结果大于Long.Max_Value也不会丢失精度。最后BigInteger不能运算小数,否则抛出异常。以下是代码示例:

    public static void main(String[] args) {
            // int最大值 2147483647
            System.out.println(Integer.MAX_VALUE);
            // long最大值 9223372036854775807
            System.out.println(Long.MAX_VALUE);
    
            BigInteger bigInteger1 = new BigInteger("9223372036854775807");
            BigInteger bigInteger2 = new BigInteger("9223372036854775807");
            // 两个数相乘
            BigInteger value12 = bigInteger1.multiply(bigInteger2);
            // 直接获取Long结果是错误的,因为已经超过了Long的最大精度
            // long longValue = value12.longValue();
            // 获取字符串可以
            String svalue12 = value12.toString();
            // 85070591730234615847396907784232501249
            System.out.println(svalue12);
    
            // 在将相乘的结果/9223372036854775807
            BigInteger bigInteger3 = new BigInteger(svalue12);
            BigInteger bigInteger4 = new BigInteger("9223372036854775807");
            // 两个数相除
            BigInteger bigInteger34 = bigInteger3.divide(bigInteger4);
            // 这个结果是没有超过Long的精度
            long lbigInteger34 = bigInteger34.longValue();
            // 9223372036854775807
            System.out.println(lbigInteger34);
    
            BigInteger bigInteger5 = new BigInteger("1");
            BigInteger bigInteger6 = new BigInteger("1");
            // 两个数相加
            BigInteger bigInteger56 = bigInteger5.add(bigInteger6);
            System.out.println(bigInteger56.byteValue());
    
            BigInteger bigInteger7 = new BigInteger("2");
            BigInteger bigInteger8 = new BigInteger("1");
            // 两个数相减
            BigInteger bigInteger78 = bigInteger7.subtract(bigInteger8);
            System.out.println(bigInteger78.byteValue());
    
            // 错误的,它不支持小数
            // BigInteger bigInteger9 = new BigInteger("1.2");
        }
    View Code

    BigDecimal

    BigDecimal在实际开发中要比BigInteger的使用频率高的多,原因就是它可以计算小数,并且它可以根据用户的设置对小数结果进行改变,例如保留小数位数,保留小数策略。

        public static void main(String[] args) {
            Long max_long = Long.MAX_VALUE;
            System.out.println(max_long);
    
            BigInteger bigInteger = new BigInteger(max_long + "");
            // 你可以使用一个BigInteger实例化BigDecimal
            BigDecimal bigDecimal1 = new BigDecimal(bigInteger);
            BigDecimal bigDecimal2 = new BigDecimal(bigInteger);
            // 除法运算
            BigDecimal bigDecimal12 = bigDecimal1.divide(bigDecimal2);
            System.out.println(bigDecimal12.intValue());
    
            // 使用字符串实例化BigDecimal做加法运算
            BigDecimal bigDecimal3 = new BigDecimal("1");
            BigDecimal bigDecimal4 = new BigDecimal("1");
            BigDecimal bigDecimal34 = bigDecimal3.add(bigDecimal4);
            System.out.println(bigDecimal34.intValue());
    
            // 使用字符串实例化BigDecimal做减法运算
            BigDecimal bigDecimal5 = new BigDecimal("5");
            BigDecimal bigDecimal6 = new BigDecimal("3");
            BigDecimal bigDecimal56 = bigDecimal5.subtract(bigDecimal6);
            System.out.println(bigDecimal56.intValue());
    
            // 使用字符串实例化BigDecimal做乘法运算
            BigDecimal bigDecimal7 = new BigDecimal("3");
            BigDecimal bigDecimal8 = new BigDecimal("4");
            BigDecimal bigDecimal78 = bigDecimal7.multiply(bigDecimal8);
            System.out.println(bigDecimal78.intValue());
    
            // 对小数做操作,这个加法运算的结果是 7.9888
            BigDecimal bigDecimal9 = new BigDecimal("3.1");
            BigDecimal bigDecimal10 = new BigDecimal("4.8888");
            BigDecimal bigDecimal910 = bigDecimal9.add(bigDecimal10);
            System.out.println(bigDecimal910.toString());
    
            BigDecimal bigDecimala1 = new BigDecimal("3.1");
            BigDecimal bigDecimala2 = new BigDecimal("4.8888");
            BigDecimal bigDecimala12 = bigDecimala1.add(bigDecimala2);
            // 对一个BigDecimal的结果进行小数舍入,以下是保留小数点后3位,多余的四舍五入 7.989
            BigDecimal sbigDecimala12 = bigDecimala12.setScale(3, BigDecimal.ROUND_HALF_UP);
            System.out.println(sbigDecimala12.toString());
        }
    View Code
  • 相关阅读:
    mac下 brew 切换阿里镜像
    梨视频(PearVideo)下载解析的方法和技巧,梨视频下载到本地
    如何快速的下载Tumblr(汤不热)视频?操作步骤很简单,快来看看!
    什么是json? 什么是xml?JSON与XML的区别比较
    如何下载Twitter视频?最简单的保存推特视频的方法
    【收藏】轻松导出全民K歌里任何人录制的短视频(MV)、歌曲的方法
    【小白技术笔记】保存皮皮虾APP无水印视频到手机相册,只需要三步 [技术干货]
    技术干货!腾讯微视短视频去水印下载到本地的方法
    P1562 还是N皇后
    循环赛日程表
  • 原文地址:https://www.cnblogs.com/zumengjie/p/13815851.html
Copyright © 2020-2023  润新知