数字处理类

1、前言

在解决实际问题的时候,对数字的处理非常普遍。比如数学问题、随机问题、商业货币问题、科学计算问题等。Java中提供了处理相关问题的类,如用于格式化数字的DecimalFormat类,数学计算相关的Math类,随机数相关的Random类,大数字处理相关的BigInteger类和BigDecimal类。以下分别对这些类作一些简单的介绍。

2、Math类

Math类是Java提供的执行数学基本运算的类,api文档中说明如下:
在这里插入图片描述
注意Math类是final修饰的最终类,不可被继承。

Math类提供的成员属性如下:
在这里插入图片描述
在这里插入图片描述
提供的方法如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以下对常用的方法进行说明。

2.1、三角函数方法

  • sin(double a):返回角的正弦值。
  • cos(double a):返回角的余弦值。
  • tan(double a):返回角的正切值。
  • asin(double a):返回值的反正弦。
  • acos(double a):返回值的反余弦。
  • atan(double a):返回值的反正切。
  • toRadians(double a):角度转换为弧度。
  • toDegress(double a):弧度转换为角度。

以下用例子说明:

    public static void main(String[] args) {

        System.out.println("π=" + Math.PI);
        System.out.println("e=" + Math.E);
        System.out.println("90°的正弦值:" + Math.sin(Math.PI / 2));
        System.out.println("180°的余弦值:" + Math.cos(Math.PI));
        System.out.println("45°的正切值:" + Math.tan(Math.PI / 4));
        System.out.println("1.0的反正弦:" + Math.asin(1.0));
        System.out.println("-1.0的反余弦:" + Math.acos(-1.0));
        System.out.println("1.0的反正切:" + Math.atan(1.0));
        System.out.println("90°的弧度值:" + Math.toRadians(90.0));
        System.out.println("π的角度值:" + Math.toDegrees(Math.PI));
    }

执行,控制台:
在这里插入图片描述

2.2、指数函数方法

  • exp(double a):取e的a次方。
  • log(double a):取a的自然对数。
  • log10(double 10):取10为底数的对数值。
  • sqrt(double a):取a的平方根,a非负数。
  • cbrt(double a):取a的立方根。
  • pow(double a,double b):取a的b次方。

以下用代码说明:

    public static void main(String[] args) {

        System.out.println("e的3次方为:" + Math.exp(3.0));
        System.out.println("e的对数为:" + Math.log(Math.E));
        System.out.println("以10为底,10的对数为:" + Math.log10(10.0));
        System.out.println("4的平方根为:" + Math.sqrt(4.0));
        System.out.println("8的立方根为:" + Math.cbrt(8.0));
        System.out.println("2的5次方为:" + Math.pow(2, 5.0));
    }

执行,控制台:
在这里插入图片描述

2.3、取整函数方法

  • ceil(double a):返回大于等于a的最小整数。
  • floor(double a):返回小于等于a的最大整数。
  • rint(double a):返回与a最接近的整数,如果两个整数同样接近,取偶数,比如2.5,那么会取2而不是3。
  • round(a):a可以是float类型,也可以是double类型,此方法是四舍五入。

以下代码说明:

    public static void main(String[] args) {

        System.out.println("大于等于5.7的最小整数:" + Math.ceil(5.7));
        System.out.println("小于等于5.7的最大整数:" + Math.floor(5.7));
        System.out.println("与5.7最接近的整数:" + Math.rint(5.7));
        System.out.println("与5.5最接近的整数:" + Math.rint(5.5));
        System.out.println("5.4的四舍五入值:" + Math.round(5.4));
        System.out.println("5.5的四舍五入值:" + Math.round(5.5));
    }

执行,控制台:
在这里插入图片描述

2.4、最大值、最小值、绝对值、随机数方法

  • max(a,b):返回较大值。a和b同类型,可以是int、long、float、double类型的。
  • min(a,b):返回较小值。a和b同类型,可以是int、long、float、double类型的。
  • abs(a):返回a的绝对值。a可以是int、long、float、double类型的。
  • random():返回一个区间在[0.0,1.0]的随机数。
    public static void main(String[] args) {

        int a = 20;
        int b = 25;
        System.out.println("较大值为:" + Math.max(a, b));
        System.out.println("较小值为:" + Math.min(a, b));
        System.out.println("20的绝对值为:" + Math.abs(20));
        System.out.println("0的绝对值为:" + Math.abs(0));
        System.out.println("-20的绝对值为:" + Math.abs(-20));
        System.out.println("随机产生一个在0到1之间的数:" + Math.random());
        System.out.println("随机产生一个在0到1之间的数:" + Math.random());
        System.out.println("随机产生一个在0到1之间的数:" + Math.random());
    }

在这里插入图片描述
注意:每次产生的随机数一定是不同的。

以两个例子熟悉一下:

找出4个数a、b、c、d中的最大值和最小值。

  public static void main(String[] args) {
        int a = 25, b = 20, c = 18,d = 27;
        int max = Math.max(Math.max(Math.max(a, b), c), d);
        int min = Math.min(Math.min(Math.min(a, b), c), d);
        System.out.println("4个数中的最大数是" + max + ",最小数是" + min);
    }

控制台:
在这里插入图片描述
用数组的话简单很多:

    public static void main(String[] args) {
        int[] arr = new int[] {25, 20, 18, 27 };
        Arrays.sort(arr);
        System.out.println("最大数是" + arr[arr.length - 1] + ",最小数是" + arr[0]);
    }

在这里插入图片描述

随机产生一个10到20之间的整数。

    public static void main(String[] args) {
        for (int i = 1; i < 11; i++) {
            double d = Math.random();
            int res = (int) Math.round((d * 10));
            int random = 10 + res;
            System.out.println("第" + i + "次产生的随机数为:" + random);
        }
    }

控制台:
在这里插入图片描述
可以看到满足要求,并且两端可以取到。

3、DecimalFormat类

数字格式化在实际问题中非常常见,比如超市的商品价格,需要保留2位有效数字。Java中只对浮点类型进行数字格式化操作,使用DecimalFormat类来格式化数字。

api文档说明如下:
在这里插入图片描述
特殊字符说明如下:
在这里插入图片描述
提供的方法如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以下用代码说明:

    public static void main(String[] args) {
        double price = 14342342543.423;
        System.out.println("未格式化之前:" + price);
        System.out.println("格式化之后:" + SimpleFormat("###,###.###", price));
        System.out.println("格式化之后:" + SimpleFormat("###.##", price));
        System.out.println("格式化之后:" + SimpleFormat("###,###.###元", price));
        System.out.println("0.976转换为百分数是:" + SimpleFormat("#.###%", 0.976));
        System.out.println("0.976转换为千分数是:" + SimpleFormat("#.###‰", 0.976));
    }

    // 定义一个方法,用于格式化数字
    private static String SimpleFormat(String pattern, double value) {
        // 实例化DecimalFormat对象
        DecimalFormat df = new DecimalFormat(pattern);
        // 使用format方法格式化
        String res = df.format(value);
        return res;
    }

控制台:
在这里插入图片描述

    public static void main(String[] args) {
        DecimalFormat df = new DecimalFormat();
        //数字分组
        df.setGroupingSize(2);
        System.out.println("数字每两个进行分组:" + df.format(471235229.432));
        //关闭数字分组
        df.setGroupingUsed(false);
        System.out.println("数字每两个进行分组:" + df.format(471235229.432));
        //开启数字分组
        df.setGroupingUsed(true);
        System.out.println("数字每两个进行分组:" + df.format(471235229.432));
    }

控制台:
在这里插入图片描述
默认是开启分组的,也就是为true的。

4、Random随机类

在实际开发中,随机数的使用是很常见的,有必要掌握在程序中产生随机数。在Java中提供了两种方式来产生随机数,Math类的random方法,还有使用Random类提供的各种方法来产生随机数。

4.1、Math类的random方法产生随机数

产生10个0到15的随机数,产生5个15到20的随机数。

    public static void main(String[] args) {
        System.out.println("以下随机产生10个0到15之间的数:");
        for (int i = 1; i < 11; i++) {
            System.out.println("产生的第" + i + "个随机数是:" + getRandomFrom0To15());
        }
        System.out.println("------------------------------");
        System.out.println("以下随机产生5个15到20之间的数:");
        for (int i = 1; i < 6; i++) {
            System.out.println("产生的第" + i + "个随机数是:" + getRandomFrom15To20());
        }
    }

    // 定义一个方法,产生0到15之间的随机数
    private static int getRandomFrom0To15() {
        double res = Math.random();
        int random = (int) (res * 15);
        return random;
    }

    // 定义一个方法,产生15到20之间的随机数
    private static int getRandomFrom15To20() {
        double res = Math.random();
        int random = (int) Math.round(res * (20 - 15));
        return random + 15;
    }

控制台:
在这里插入图片描述
范围正确,两端可以取到,没问题。

随机产生10个a-z的小写字母,10个A-Z的大写字母。

    public static void main(String[] args) {
        for (int i = 1; i <= 10; i++) {
            System.out.println("产生的第" + i + "个小写字母是:" + getRandomChar('a', 'z'));
        }
        System.out.println("-----------------------------");
        for (int i = 1; i <= 10; i++) {
            System.out.println("产生的第" + i + "个大写字母是:" + getRandomChar('A', 'Z'));
        }
    }

    // 定义一个方法,随机产生两个字母之间的任意字母
    private static char getRandomChar(char c1, char c2) {
        char res = (char) (Math.random() * (c2 - c1 + 1) + c1);
        return res;
    }

执行,控制台如下:
在这里插入图片描述

4.2、Random类产生随机数

这个Random类是Java专门提供用来生成随机数的。api文档中说明如下:
在这里插入图片描述
提供的方法如下:
在这里插入图片描述
在这里插入图片描述
常用的几种方法:

  • nextInt():返回一个随机整数。
  • nextInt(int n):返回0到n之间的随机整数,不包括n。
  • nextLong():返回一个随机long类型值。
  • nextFloat():返回一个随机Float类型值。
  • nextDouble():返回一个随机Double类型值。
  • nextBooean():返回一个随机lBoolean类型值。
  • nextGaussian() :返回一个概率密度为高斯分布的双精度值。

以下代码示例:

    public static void main(String[] args) {
        Random random = new Random();
        for (int i = 1; i <= 10; i++) {
            // 随机产生一个0到15之间的整数
            int res = random.nextInt(16);
            System.out.println("产生的第" + i + "个随机数是:" + res);
        }
        System.out.println("-------------------------------");
        for (int i = 1; i <= 5; i++) {
            // 随机产生一个15到20之间的整数
            int res = random.nextInt(6) + 15;
            System.out.println("产生的第" + i + "个随机数是:" + res);
        }
    }

控制台:
在这里插入图片描述
如果要使用随机数的话,推荐还是首选Random类,虽然Math的random方法可以实现同样的效果,但要稍微复杂一些,使用Random类的一些方法非常简单。

5、例子

下面通过两个例子进一步加深对数字处理类的理解。

求圆形的周长和面积,以半径为参数,计算结果保留5位小数。

public class Test {

    public static final double PI = Math.PI;

    public static final DecimalFormat PATTERN = new DecimalFormat("#.#####");

    public static void main(String[] args) {
        System.out.println("半径为5的圆形周长为:" + getGirth(5));
        System.out.println("半径为5的圆形面积为:" + getArea(5));
    }

    // 定义一个方法,求圆形周长,保留5位小数
    private static double getGirth(double radius) {
        double girth = 2 * PI * radius;
        String res = PATTERN.format(girth);
        return Double.parseDouble(res);
    }

    // 定义一个方法,求圆形面积,保留5位小数
    private static double getArea(double radius) {
        double area = PI * Math.pow(radius, 2);
        String res = PATTERN.format(area);
        return Double.parseDouble(res);
    }

}

在这里插入图片描述

获取2-32之间的6个偶数,并且求他们的和值。

    public static void main(String[] args) {
        int sum = 0;
        int i = 1;
        Random random = new Random();
        while (i <= 6) {
            int res = 2 + random.nextInt(31);
            if (res % 2 == 0) {
                System.out.println("产生的第" + i + "个随机偶数是:" + res);
                sum += res;
                i++;
            }
        }
        System.out.println("和值为:" + sum);
    }

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值