zoukankan      html  css  js  c++  java
  • 关于Java大数操作(BigInteger、BigDecimal)

    一.BigInteger

    1、可以使用BigInteger操作大整数

    如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作。BigInteger是在java.math包中。

    代码示例:

    package ustc.lichunchun.bigdataapi;
    
    import java.math.BigInteger;
    
    public class BigIntegerDemo1 {
    
              public static void main(String[] args) {
              BigInteger bi1 = new BigInteger("123456789") ;    // 声明BigInteger对象
              BigInteger bi2 = new BigInteger("987654321") ;    // 声明BigInteger对象
              System.out.println("加法操作:" + bi2.add(bi1)) ;    // 加法操作
              System.out.println("减法操作:" + bi2.subtract(bi1)) ;    // 减法操作
              System.out.println("乘法操作:" + bi2.multiply(bi1)) ;    // 乘法操作
              System.out.println("除法操作:" + bi2.divide(bi1)) ;    // 除法操作
              System.out.println("最大数:" + bi2.max(bi1)) ;    // 求出最大数
              System.out.println("最小数:" + bi2.min(bi1)) ;    // 求出最小数
              BigInteger result[] = bi2.divideAndRemainder(bi1) ;    // 求出余数的除法操作
              System.out.println("商是:" + result[0] + ";余数是:" + result[1]) ;
         }
    }

    发现divide()方法本身只是把最终的商保存下来了,但是这样的两个数字相除的时候肯定是无法整除,肯定存在余数,所以我们在上面代码中还用到了divideAndRemainder()方法来获得结果和余数。

    二.BigDecimal

    1、可以使用BigDecimal指定小数的保留位数

    使用此类可以完成大的小数操作,而且也可以使用此类进行精确的四舍五入,这一点在开发中经常使用。

    对于不需要任何准确计算精度的程序可以直接使用float或double完成,但是如果需要精确计算结果,则必须使用BigDecimal类。

    package ustc.lichunchun.bigdataapi;
    
    import java.math.BigDecimal;
    
    public class BigDecimalDemo01 {
    
                public static void main(String[] args) {
                          System.out.println("加法运算:" + MyMath.round(MyMath.add(10.345,3.333),1)) ;
                          System.out.println("减法运算:" + MyMath.round(MyMath.sub(10.345,3.333),3)) ;
                          System.out.println("乘法运算:" + MyMath.round(MyMath.mul(10.345,3.333),4)) ;
                          System.out.println("除法运算:" + MyMath.div(10.345,3.333,3)) ;
           }
    }
    class MyMath{
                public static double add(double d1,double d2){    // 进行加法计算
                         BigDecimal b1 = new BigDecimal(d1) ;
                         BigDecimal b2 = new BigDecimal(d2) ;
                         return b1.add(b2).doubleValue() ;
                }
                public static double sub(double d1,double d2){    // 进行减法计算
                         BigDecimal b1 = new BigDecimal(d1) ;
                         BigDecimal b2 = new BigDecimal(d2) ;
                         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 static double round(double d,int len){    // 进行四舍五入
                         BigDecimal b1 = new BigDecimal(d) ;
                         BigDecimal b2 = new BigDecimal(1) ; // 技巧
                         return b1.divide(b2,len,BigDecimal.ROUND_HALF_UP).doubleValue() ;
                }
    };

    2、BigDecimal加减乘除的基本用法

    Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。

    在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。

    BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。

    方法中的参数也必须是BigDecimal的对象。构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

    import java.math.BigDecimal;
    public class T {
        public static void main(String[] args) {
            String a = "9999.9999";
            int b = 9999;
            double c = 9999.9999;
            char d = 99;
            System.out.println("===================");
            // 不同类型转为BigDecimal
            BigDecimal ma = new BigDecimal(a);
            BigDecimal mb = new BigDecimal(b);
            BigDecimal mc = new BigDecimal(c);
            BigDecimal md = new BigDecimal(d);
            System.out.println("ma:"+ma.toString());
            System.out.println("mb:"+mb.toString());
            System.out.println("mc:"+mc.toString());
            System.out.println("md:"+md.toString());
            System.out.println("===================");
            //
            BigDecimal add = ma.add(mb);
            System.out.println("加法:"+add);
            //
            BigDecimal sub = ma.subtract(mb);
            System.out.println("减法:"+sub);
            //
            BigDecimal mul = mb.multiply(md);
            System.out.println("乘法:"+mul);
            //
            BigDecimal div = mb.divide(md);
            System.out.println("除法:"+div);
            System.out.println("===================");
            mc = mc.setScale(2, BigDecimal.ROUND_HALF_UP);
            System.out.println("四舍五入:"+mc);
            System.out.println("===================");
            mc = mc.negate();
            System.out.println("负数:"+mc);
            System.out.println("===================");
        }
    }

    BigDecimal和String的相互转换:

    /*由数字字符串构造BigDecimal的方法 
    *设置BigDecimal的小数位数的方法 
    */ 
    import java.math.BigDecimal; 
    //数字字符串 
    String StrBd="1048576.1024"; 
    //构造以字符串内容为值的BigDecimal类型的变量bd 
    BigDecimal bd=new BigDecimal(StrBd); 
    //设置小数位数,第一个变量是小数位数,第二个变量是取舍方法(四舍五入) 
    bd=bd.setScale(2, BigDecimal.ROUND_HALF_UP); 
    //转化为字符串输出 
    String OutString=bd.toString(); 
  • 相关阅读:
    VSCode显示多个Tab窗口
    react + antd实现动态菜单
    vue 全局插件封装--提示toast
    ElementUI之el-scrollbar+el-select组合
    vue 滚动条组件对比
    【智能车】NXP_MIMXRT1064库函数
    【模电学习】二极管的特性与参数
    【模电学习】半导体——N与P(2)
    【协议】IIC通信
    【模电学习】半导体——N与P(1)
  • 原文地址:https://www.cnblogs.com/ZJOE80/p/9764927.html
Copyright © 2011-2022 走看看