JavaAPI——Math的基本使用

62 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第26天,点击查看活动详情

Math

  • 是一个帮助我们用于进行数学计算的工具类
  • 私有化构造方法,所有的方法都是静态的

Math类的常用方法

方法名说明
public static int abs(int a)返回 int 值的绝对值。
public static double ceil(double a)向上取整
public static double floor(double a)向下取整
public static int round(float a)四舍五入
public static int max(int a,int b)获取两个int值中的较大值
public static double pow(double a,double b)返回a的b次幂
public static double random()返回值为double的随机值,范围[0.0,1.0)

绝对值

代码测试:

//获取绝对值  
System.out.println("获取绝对值");  
System.out.println(Math.abs(666));//666  
System.out.println(Math.abs(-666));//666

但是存在一个bug:
以int为例,取值范围:-2147483648~2147483647
如果没有正数与负数对应,那么传递负数结果有误
-2147483648没有正数与负数对应,所以abs结果产生bug

System.out.println(Math.abs(-2147483648));//-2147483648

上下取整

上取整

进一法:向正无穷方向获取距离最近的整数

//上取整  
System.out.println("上取整");  
System.out.println(Math.ceil(12.16));//13.0  
System.out.println(Math.ceil(12.66));//13.0  
System.out.println(Math.ceil(-12.16));//-12.0  
System.out.println(Math.ceil(-12.66));//-12.0

image.png

下取整

去尾法:向负无穷方向获取距离最近的整数

//下取整  
System.out.println("下取整");  
System.out.println(Math.floor(12.16));//12.0  
System.out.println(Math.floor(12.66));//12.0  
System.out.println(Math.floor(-12.16));//-13.0  
System.out.println(Math.floor(-12.66));//-13.0

image.png

四舍五入

//四舍五入  
System.out.println("四舍五入");  
System.out.println(Math.round(12.16));//12  
System.out.println(Math.round(12.66));//13  
System.out.println(Math.round(-12.16));//-12  
System.out.println(Math.round(-12.66));//-13

image.png

获取最值

//获取最值  
System.out.println("获取最值");  
System.out.println(Math.max(66, 88));//88  
System.out.println(Math.min(66, 88));//66

image.png

a的b次幂

//获取a的b次幂  
System.out.println("a的b次幂");  
System.out.println(Math.pow(2, 3));//8.0

image.png 细节:

  • 如果第二个参数是0~1之间的小数
System.out.println(Math.pow(4, 0.5));//2.0  
System.out.println(Math.pow(2, -2));//0.25

image.png

random随机数

//random随机数  
System.out.println("random随机数");  
for (int i = 0; i < 10; i++) {  
    System.out.println(Math.random());  
}

image.png 输出1~100的随机数

System.out.println("输出1~100的随机数");  
for (int i = 0; i < 10; i++) {  
    System.out.println(Math.floor(Math.random() * 100 + 1));  
}

image.png

利用Math.sqrt判断是否是质数

  • 我们知道的是,试除法可以判断质数
  • 最朴素的做法是从2开始,一直到n-1
    • 如果会被整除则不是质数
    • 否则是质数
  • 但是我们可以只循环到sqrt(n)即可~
public static boolean checkPrime(int x) {  
    if (x < 2) return false;  
    for (int i = 2; i <= Math.sqrt(x); i++) {  
        if (x % i == 0) return false;  
    }  
    return true;  
}

自幂数

一个n位自然数等于自身各个数位上数字的n次幂之和 举例:三位数 153 13+53+33=1531^3+5^3+3^3=153 四位数 1634 14+64+34+44=16341^4+6^4+3^4+4^4=1634

如果自幂数也是一位数,也叫作独身数 三位自幂数:水仙花数 四位自幂数:四叶玫瑰数 五位自幂数:五角星数 六位自幂数:六合数 七位自幂数:北斗七星数 八位自幂数:八仙数 九位自幂数:九九重阳数 十位自幂数:十全十美数

求水仙花数

public static int numFlowers() {  
    int res = 0;  
    for (int i = 100; i <= 999; i++) {  
        int temp = i;  
        int sum = 0;  
        while (temp > 0) {  
            sum += Math.pow(temp % 10, 3);  
            temp /= 10;  
        }  
        if (sum == i) res++;  
    }  
    return res;  
}