美文网首页
Java大数字处理类

Java大数字处理类

作者: 撸码小狂魔 | 来源:发表于2020-05-27 15:00 被阅读0次

    现在要是进行正常的程序开发,基本上程序语言里面提供的数据类型里面都能够满足开发人员的需求,而且在整个的基础编程语言里面的double(保存范围:4.9E-324 ~ 1.7976931348623157E308)数据类型可以保存的范围是非常大的。

    但是呢,现在某些的程序计算有可能要进行更大的数字计算操作,那么这种情况下就不可能采用常规的形式完成处理,所以按照传统的编程语言模型来讲,此时一般都会利用字符串实现大数字数据的保存。为了解决这样的难题,设计专门提供了一个java.math的包,而在这个包里面提供有两个程序类:BigInteger(大整数的操作类)、BigDecimal(大小数的操作类)。

    大数字类继承结构

    BigInteger类的使用

    如果夏哀嗯要使用BigInteger,那么就需要通过构造方法来进行BigInteger类对象的实例化,此类的构造方法定义如下:

    public BigInteger(byte[] val)

    在使用BigInteger的时候需要明确的传入一个字符串,而这个字符串所包含的就是一个大数字信息,当获取了BigInteger类的对象实例之后,就可以利用起本身提供的方法,进行数学运算。

    范例:通过BigInteger类实现四则运算

    import java.math.BigInteger;
    
    public class Test {
    
        public static void main(String[] args) {
    
            BigInteger bigIntA = new BigInteger("84561894561364516451654354");  //大数字类
            BigInteger bigIntB = new BigInteger("95476536532545312587654654");  //大数字类
    
            System.out.println("加法计算:" + bigIntA.add(bigIntB));
            System.out.println("减法计算:" + bigIntA.subtract(bigIntB));
            System.out.println("乘法计算:" + bigIntA.multiply(bigIntB));
            System.out.println("除法计算:" + bigIntA.divide(bigIntB));
    
            //当前给定的两个数字类对象是不可能进行整除处理的。所以可以采用余数的形式进行除法计算
            BigInteger result [] = bigIntA.divideAndRemainder(bigIntB);
            System.out.println("除法计算 -> " + "商: " + result[0] + " , 余:" + result[1]);
    
        }
    
    }
    

    输出结果:

    加法计算:180038431093909829039309008
    减法计算:-10914641971180796136000300
    乘法计算:8073676815349364036305129638756291550362695127463516
    除法计算:0
    除法计算 -> 商: 0 , 余:84561894561364516451654354
    

    所有的大数字类都可以完成普通计算的基本操作支持,但是如果想要执行更加繁琐的大数字的计算操作,肯定要额外的使用第三方的程序组件包来完善程序功能。

    BigDecimal类使用

    BigDecimal类所描述的是一个小数,但是这个类所具备的功能比BigInteger丰富,尤其在构造方法的定义上。


    image.png

    从构造方法本身给出的定义来讲,BigDecimal构造实际上功能会更加的丰富,它本身的处理方法与形式和BigInteger是非常类似的,下面使用BigDecimal类实现四则运算。
    范例:

    import java.math.BigDecimal;
    import java.math.RoundingMode;
    
    public class Test {
    
        public static void main(String[] args) {
    
            BigDecimal bigDecimalA = new BigDecimal("84561894561.364516451654354");  //大数字类
            BigDecimal bigDecimalB = new BigDecimal("9547653653.2545312587654654");  //大数字类
    
            System.out.println("加法计算:" + bigDecimalA.add(bigDecimalB));
            System.out.println("减法计算:" + bigDecimalA.subtract(bigDecimalB));
            System.out.println("乘法计算:" + bigDecimalA.multiply(bigDecimalB));
            System.out.println("除法计算:" + bigDecimalA.divide(bigDecimalB, RoundingMode.HALF_UP));
    
        }
    
    }
    

    输出:

    加法计算:94109548214.6190477104198194
    减法计算:75014240908.1099851928888886
    乘法计算:807367681534936403630.5129638756291550362695127463516
    除法计算:8.856824685145518
    

    通过当前的程序代码执行的话可以非常清楚的发现,在使用BigDecimal类的处理过程之中,需要针对除法进行四舍五入的进位配置,所以对于四舍五入的功能处理也可以通过BigDecimal类的方法来完成。

    范例:通过BigDecimal实现准确位数的四舍五入

    public static double round(double num,int scale){
            return new BigDecimal(num).divide(new BigDecimal(1),scale,RoundingMode.HALF_UP).doubleValue();
        }
    

    在实际的开发过程中,如果面临数据的精准度很高的情况下,千万不要再去使用double,把所有的double都替换为BigDecimal。如果没有非常复杂的小数计算,那么还使用普通的double即可。

    相关文章

      网友评论

          本文标题:Java大数字处理类

          本文链接:https://www.haomeiwen.com/subject/dsrwahtx.html