77java数字操作类(大数字操作类)

92 阅读2分钟

数字操作类(大数字操作类)


一、大数据操作类简介

一般的开发当中使用的数据已经都包含在给定的数据范围之中。但是有时数据太大,并且超过了预期的范围。

在原始程序之中遇到这样的问题可以用字符串来解决;如果要进行数学计算,则取出每一位进行手工的处理。

但是这种操作的模式非常麻烦,所以在java.math包里面提供有两个类:

BigInteger、BigDecimal。这两个类都属于Number的子类。

 

 

二、范例

范例一:观察BigInteger操作

package org.example.controller;

import java.math.BigInteger;

public class cs {

public static void main(String[] args) {

        

BigInteger bigA = new BigInteger("842390234890234890234890234890");

BigInteger bigB = new BigInteger("2347892347890");

        System.out.println("加法计算:" + bigA.add(bigB));

        System.out.println("减法计算:" + bigA.subtract(bigB));

        System.out.println("乘法计算:" + bigA.multiply(bigB));

       System.out.println("除法计算:" + bigA.divide(bigB));

BigInteger result[] = bigA.divideAndRemainder(bigB);

        System.out.println("商= " + result[0] + "、余数= " + result[1]);

    }

}

 

 

范例二:大小数BigDecimal


package org.example.controller;

import java.math.BigDecimal;

public class cs {

    public static void main(String[] args) throws Exception{

        double num = 23489023489023478902347890124890234890234890234.90234;

        System.out.println("乘法计算:"+new BigDecimal(num) . pow(89238));

    }

}

这种计算所消耗的cpu资源是相当可观的。实际上在BigDecimal程序类里面还有一个功能,是四舍五入,不过他的四舍五入是通过除法实现的:

public BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)

进位模式:

public static final int ROUND_HALF_UP;

 

范例三:四舍五入

package org.example.controller;

import java.math.BigDecimal;

public class cs {

 static class MyMath {

 public static double round(double num, int scale) {

return new BigDecimal(num).divide(new BigDecimal(1), scale, BigDecimal.ROUND_HALF_UP).doubleValue();

        }

    }

 public static class TestDemo {

        public static void main(String[] args) throws Exception {

            long start = System.currentTimeMillis();

            double num = 23489023489023478902347890124890234890234890234.90234;

 

 System.out.println("乘法计算:" + new BigDecimal(num).pow(892389));

            long end = System.currentTimeMillis();

            System.out.println(end - start);

        }

    }

}

注意:

关于四舍五入的处理实际上有两类做法

 

这些给定的默认的数学操作类的功能都十分有限,在开发里面如果真用到复杂的数学逻辑,需要再找其他的开发包来做。