JavaRush /Java 博客 /Random-ZH /Java Math 类及其方法

Java Math 类及其方法

已在 Random-ZH 群组中发布
在本文中,我们将简要概述 Java 中的 Math 类。我们来谈谈这个类的方法以及如何使用它们。Math 类位于 java.lang 包中,并提供一组静态方法来执行许多不同的数学计算。以下是 Math 类可能有用的计算示例:
  • 绝对值的计算(模值)
  • 三角函数值的计算(正弦、余弦等)
  • 不同程度的海拔
  • 提取不同程度的根
  • 随机数生成
  • 四舍五入
  • ETC。
下面我们将尝试看看 Java Math 类如何帮助解决上面列出的问题。Java Math 类及其方法 - 1让我们开始使用允许您计算值模的方法来分析该类。这是由abs 方法负责的。该方法是重载的,与Math类有以下区别:
  • 静态双腹肌(双a)
  • 静态浮动绝对值(浮动a)
  • 静态 int 绝对值(int a)
  • 静态长腹肌(长a)
使用示例:
public static void main(String[] args) {
        System.out.println(Math.abs(-1));      // 1
        System.out.println(Math.abs(-21.8d));  // 21.8
        System.out.println(Math.abs(4532L));   // 4532
        System.out.println(Math.abs(5.341f));  // 5.341
    }

计算三角函数的值

Math 类允许您计算各种三角函数 - 正弦、余弦、正切等。完整的方法列表可以在官方文档网站上找到。下面是这些方法的列表:
  • 静态双罪(双a)
  • 静态双 cos(双 a)
  • 静态双tan(双a)
  • 静态双asin(双a)
  • 静态双 acos(双 a)
  • 静态双 atan(双 a)
计算方法:正弦、余弦、正切、反正弦、反余弦、反正切。每种方法都会计算角度“a”的值。该参数传递给每个方法,并且在每种情况下都以弧度为单位(而不是我们习惯的以度为单位)。这里有两个消息,好消息和坏消息。让我们从好的开始吧。Math 类具有将弧度转换为度数以及将度数转换为弧度的方法:
  • 静态双 toDegrees(双 angrad)
  • 静态双 toRadians(双 angdeg)
这里,toDegrees 方法将以弧度为单位的角度 angrad 转换为度数。相反,toRadians 方法将以度为单位的角度 angdeg 转换为弧度。坏消息是,这种情况发生时会出现一些错误。这是计算正弦和余弦的示例:
public static void main(String[] args) {
        System.out.println(Math.sin(Math.toRadians(0)));
        System.out.println(Math.sin(Math.toRadians(30)));
        System.out.println(Math.sin(Math.toRadians(90)));

        System.out.println(Math.cos(Math.toRadians(0)));
        System.out.println(Math.cos(Math.toRadians(30)));
        System.out.println(Math.cos(Math.toRadians(90)));
    }
程序将输出:

0.0
0.49999999999999994
1.0

1.0
0.8660254037844387
6.123233995736766E-17
它与正弦和余弦表不太对应,部分原因是从角度到弧度的转换中存在错误。

求幂

为了计算数字的幂,Math 类提供了一个 pow 方法,该方法具有以下签名:
static double pow(double a, double b)
此方法将参数“a”进行“b”次幂。例子:
public static void main(String[] args) {
        System.out.println(Math.pow(1,2)); // 1.0
        System.out.println(Math.pow(2,2)); // 4.0
        System.out.println(Math.pow(3,2)); // 9.0
        System.out.println(Math.pow(4,2)); // 16.0
        System.out.println(Math.pow(5,2)); // 25.0

        System.out.println(Math.pow(1,3)); // 1.0
        System.out.println(Math.pow(2,3)); // 8.0
        System.out.println(Math.pow(3,3)); // 27.0
        System.out.println(Math.pow(4,3)); // 64.0
        System.out.println(Math.pow(5,3)); // 125.0
    }

拔根

Math 类提供了求平方根和立方根的方法。以下方法负责此过程:
  • 静态双开方(双a)
  • 静态双 cbrt(双 a)
sqrt 方法取平方根,cbrt 方法取立方根。例子:
public static void main(String[] args) {
        System.out.println(Math.sqrt(4));   // 2.0
        System.out.println(Math.sqrt(9));   // 3.0
        System.out.println(Math.sqrt(16));  // 4.0

        System.out.println(Math.cbrt(8));   // 2.0
        System.out.println(Math.cbrt(27));  // 3.0
        System.out.println(Math.cbrt(125)); // 5.0
    }

随机数生成

为了生成随机数,Math 类提供了 random 方法。此方法生成 0.0 到 1.0 范围内的随机正实数(双精度)。方法签名如下所示:
public static double random()
让我们看一下例子:
public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        System.out.println(Math.random());
    }
}
执行main方法后,控制台显示如下:

0.37057465028778513
0.2516253742011597
0.9315649439611121
0.6346725713527239
0.7442959932755443
通过一些操作,您可以使用 Math 类的 random 方法来获取特定范围内的整数随机数。下面是一个函数示例,该函数接受两个参数 min 和 max,并返回一个介于 min(含)和 max(含)范围内的随机整数:
static int randomInARange(int min, int max) {
    return  (int) (Math.random() * ((max - min) + 1)) + min;
}
让我们编写一个 Main 方法,在其中测试 randomInARange 方法:
public class MathExample {


    public static void main(String[] args) {
        // Карта, в которой мы будем хранить количество выпадений Howого-то числа
        Map<Integer, Integer> map = new TreeMap<>();

        // За 10000 операций
        for (int i = 0; i < 10000; i++) {

            // Сгенерируем рандомное число от -10 включительно до 10 включительно
            final Integer randomNumber = randomInARange(-10, 10);


            if (!map.containsKey(randomNumber)) {
                // Если карта еще не содержит "выпавшего случайного числа"
                // Положим его в карту с кол-вом выпадений = 1
                map.put(randomNumber, 1);
            } else {
                // Иначе, увеличим количество выпадений данного числа на 1
                map.put(randomNumber, map.get(randomNumber) + 1);
            }
        }

        // Выведем на экран содержимое карты в формате ключ=[meaning]
        for (Map.Entry<Integer, Integer> entry : map.entrySet()){
            System.out.println(String.format("%d=[%d]", entry.getKey(), entry.getValue()));
        }
    }

    static int randomInARange(int min, int max) {
        return  (int) (Math.random() * ((max - min) + 1)) + min;
    }
}
运行 main 方法后,输出可能如下所示:

-10=[482]
-9=[495]
-8=[472]
-7=[514]
-6=[457]
-5=[465]
-4=[486]
-3=[500]
-2=[490]
-1=[466]
0=[458]
1=[488]
2=[461]
3=[470]
4=[464]
5=[463]
6=[484]
7=[479]
8=[459]
9=[503]
10=[444]

Process finished with exit code 0

四舍五入

对于 Java 中的数字舍入,工具之一是 Math 类的方法。更准确地说,圆形、天花板和地板方法:
  • 静态长圆(双A)
  • 静态 int round(float a)
  • 静态双层(双A)
  • 静态双层天花(双A)
舍入法——照常舍入到普通人。如果数字的小数部分大于或等于 0.5,则该数字将向上舍入,否则向下舍入。无论小数部分的值如何,floor 方法始终将数字向下舍入(向负无穷大)。ceil 方法则相反,无论小数部分的值如何,都会将数字向上舍入(朝正无穷大)。让我们看一下例子:
public static void main(String[] args) {
    System.out.println(Math.round(1.3)); // 1
    System.out.println(Math.round(1.4)); // 1
    System.out.println(Math.round(1.5)); // 2
    System.out.println(Math.round(1.6)); // 2

    System.out.println(Math.floor(1.3)); // 1.0
    System.out.println(Math.floor(1.4)); // 1.0
    System.out.println(Math.floor(1.5)); // 1.0
    System.out.println(Math.floor(1.6)); // 1.0

    System.out.println(Math.ceil(1.3)); // 2.0
    System.out.println(Math.ceil(1.4)); // 2.0
    System.out.println(Math.ceil(1.5)); // 2.0
    System.out.println(Math.ceil(1.6)); // 2.0
}

结论

在这篇文章中,我们对数学课进行了粗浅的了解。我们研究了如何使用此类:
  • 计算值的模;
  • 计算三角函数的值;
  • 计算数字的幂;
  • 提取平方根和立方根;
  • 生成随机数;
  • 整数。
这个类中还有很多其他有趣的方法。可以在官方文档网站上找到。嗯,对于初次认识的人来说,上面列出的方法已经足够了。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION