八:数字操作类

1、Math数学计算类

          Math类的主要功能是进行数学计算的操作类,提供有基础的计算公式操作,且这个类的构造方法被私有化,且该类中的所有方法都是static型的方法,即:这些方法都可以通过类名称直接调用。

          范例:一些数学方法使用

package cn.demos;

public class JavaAPIDemo {

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

		// 取正
		System.out.println(Math.abs(-10.1));// 10.1
		// 最大值
		System.out.println(Math.max(12, 14));// 14
		// 对数
		System.out.println(Math.log(5));// 1.6094379124341003

		System.out.println(Math.round(15.1));// 15
		System.out.println(Math.round(15.8));// 16

	}

}

          详细操作方法可以参考文档:https://docs.oracle.com/javase/9/docs/api/java/lang/Math.html

          注意:在Math类中虽然提供有四舍五入的方法,但是这个方法在处理的时候是直接将小数点后的所有位进行进位处理。所以,此时提供了一个可以实现指定位数的保留。

          范例:自定义的四舍五入功能

代码结果

package cn.demos;

class MathUtil {

    private MathUtil() {

    }

    /**
     * 实现数据的四舍五入操作
     * 
     * @param num
     *            要进行四舍五入操作的数字
     * @param scale
     *            四舍五入保留的小数位数
     * @return 返回四舍五入处理后的结果
     */
    public static double round(double num, int scale) {

        return Math.round(num * Math.pow(10, scale)) / Math.pow(10, scale);

    }

}

public class JavaAPIDemo {

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

        System.out.println(MathUtil.round(16.6765554, 2));

    }

}
 

16.68

          注意:Math类里面提供的基本上都是基础的数学公式,在有需求时需要自己重新整合算法。

 

2、Random随机数生成类

          Random类是产生随机数的,这个类主要是依靠内部提供的方法来完成的:

方法定义代码描述
产生一个不大于边界的随机正整数
public int nextInt​(int bound)

package cn.demos;

import java.util.Random;

public class JavaAPIDemo {

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

        Random rand = new Random();
        // 随机产生10小于100的数
        for (int x = 0; x < 10; x++) {
            System.out.print(rand.nextInt(100) + "、");
        }

    }

}
 

45、31、81、41、6、33、0、23、38、23、

          范例:随机生成彩票号——36选7

                    分析:

                              1)彩票数字不能有0存在;

                              2)不能够重复。

代码结果

package cn.demos;

import java.util.Random;

public class JavaAPIDemo {

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

        int data[] = new int[7];// 开辟7个大小的空间
        Random rand = new Random();
        int foot = 0;// 操作data脚标
        while (foot < 7) {// 选择7个数字
            int num = rand.nextInt(37);// 生成一个数字
            if (isUse(num, data)) {// 该数字可以使用
                data[foot++] = num;// 保存数据

            }
        }
        // 对数据进行一个排序
        java.util.Arrays.sort(data);
        // 输出
        for (int x = 0; x < data.length; x++) {
            System.out.print(data[x] + "、");
        }

    }

    /**
     * 判断传入的数字是否为0以及是否在数组之中存在
     * 
     * @param num
     *            要判断的数字
     * @param temp已经存在的数据
     * @return 如果该数字不是0并且可以使用则返回true,否则返回false
     */
    public static boolean isUse(int num, int temp[]) {
        if (num == 0) {
            return false;
        }
        for (int x = 0; x < temp.length; x++) {
            if (num == temp[x]) {
                return false;

            }
        }
        return true;
    }

}
 

9、14、16、19、26、31、34、

3、大数字处理类

          在进行数据计算的过程里面还有一个大数字操作类,可以实现海量数字的计算,但是提供的方法也只是基础计算。

          大数字指数字很大,大到已经超过了double的数据范围,则没有任何一种数据类型可以保存下此类的内容,所以最早时只能通过String进行保存,而String类保存的数字要进行计算的话,会将每个位的数字提取出来然后对应位进行计算,这样的操作方法比较繁琐且难度大,所以为了解决这种问题,提供了两个大数字的操作类:BigInteger、BigDecimal。

 结构构造方法
BigInteger类
public class BigInteger
extends Number
implements Comparable<BigInteger>
public BigInteger​(String val)
BigDecimal类
public class BigDecimal
extends Number
implements Comparable<BigDecimal>
public BigDecimal​(String val)

         范例:观察BigInteger类的四则运算

代码结果

package cn.demos;

import java.math.BigInteger;

public class JavaAPIDemo {

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

        BigInteger bigA = new BigInteger("273626272626526352787655444335336327353632363627");
        BigInteger bigB = new BigInteger("27362627262652635276");
        System.out.println("【加法操作】:" + bigA.add(bigB));
        System.out.println("【减法操作】:" + bigA.subtract(bigB));
        System.out.println("【乘法操作】:" + bigA.multiply(bigB));
        System.out.println("【除法操作】:" + bigA.divide(bigB));

    }

}
 

【加法操作】:273626272626526352787655444362698954616284998903
【减法操作】:273626272626526352787655444307973700090979728351
【乘法操作】:7487133707148612483105394829405642141092152088260911606512239506052
【除法操作】:10000000000000000001010701350
 

         注意:虽然提供了大数字的操作类,但是随着数字位数的增加,那么运行性能会越慢。

         从上面程序中可以观察出,在进行数学除法的时候有可能无法进行整除处理,所以,可以使用其他的除法计算来求出余数:

                  在BigInteger类中定义了一个方法可以使用:

方法定义代码结果描述
求余
public BigInteger[] divideAndRemainder​(BigInteger val)

package cn.demos;

import java.math.BigInteger;

public class JavaAPIDemo {

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

        BigInteger bigA = new BigInteger("2736262726253632363627");
        BigInteger bigB = new BigInteger("2736262726");

        BigInteger result[] = bigA.divideAndRemainder(bigB);
        System.out.println("【商】:" + result[0] + "、【余数】:" + result[1]);
    }

}
 

【商】:1000000000092、【余数】:1896192835
 
数组第一个元素为商,第二个元素为余数

         提示:若在开发中该计算没有超过基本数据类型所包含的位数,不建议使用大数字类,因为此计算的性能很差。

         BigDecimal类和BigInteger类的操作形式很相似,都有基础的数学支持。

         范例:使用BigDecimal计算

代码结果

package cn.demos;

import java.math.BigDecimal;

public class JavaAPIDemo {

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

        BigDecimal bigA = new BigDecimal("655444532224556");
        BigDecimal bigB = new BigDecimal("32224556");

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

        BigDecimal result[] = bigA.divideAndRemainder(bigB);
        System.out.println("除法计算【商】:" + result[0] + "、【余数】:" + result[1]);
    }

}
 

【加法计算】:655444564449112
除法计算【商】:20339908、【余数】:27843708
 

         这两个计算基本相似,唯一差别在于一个进行整数计算,一个进行小数计算。

         在BigDecimal类中还有一个数据进位问题,除法计算:

方法定义
除法计算public BigDecimal divide​(BigDecimal divisor,  int scale, RoundingMode roundingMode)

         范例:使用BigDecimal实现四舍五入处理

代码结果

package cn.demos;

import java.math.BigDecimal;
import java.math.RoundingMode;

class MathUtil {

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

        return new BigDecimal(num).divide(new BigDecimal(1.0), scale, RoundingMode.HALF_UP).doubleValue();

    }
}

public class JavaAPIDemo {

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

        System.out.println(MathUtil.round(19.652, 2));

    }

}
 

19.65

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值