文档

Java™教程
隐藏目录
超出基本算术
路径:学习Java语言
课程:数字和字符串
部分:数字

超越基本算术

Java编程语言通过其算术运算符支持基本算术操作:+、-、*、/和%。在java.lang包中的Math类提供了更高级的数学计算的方法和常量。

Math类中的方法都是静态的,所以你可以直接从类中调用它们,像这样:

Math.cos(angle);

注意:使用static import 语言特性,你不必在每个数学函数前面写Math
import static java.lang.Math.*;

这允许你通过简单的名称调用Math类的方法。例如:

cos(angle);

常量和基本方法

Math类包括两个常量:

Math类还包括40多个静态方法。下表列出了一些基本方法。

基本数学方法
方法 描述
double abs(double d)
float abs(float f)
int abs(int i)
long abs(long lng)
返回参数的绝对值。
double ceil(double d) 返回大于或等于参数的最小整数。返回值为double类型。
double floor(double d) 返回小于或等于参数的最大整数。返回值为double类型。
double rint(double d) 返回与参数最接近的整数。返回值为double类型。
long round(double d)
int round(float f)
返回最接近参数的long或int,根据方法的返回类型确定。
double min(double arg1, double arg2)
float min(float arg1, float arg2)
int min(int arg1, int arg2)
long min(long arg1, long arg2)
返回两个参数中较小的值。
double max(double arg1, double arg2)
float max(float arg1, float arg2)
int max(int arg1, int arg2)
long max(long arg1, long arg2)
返回两个参数中较大的值。

以下程序BasicMathDemo演示了如何使用这些方法:

public class BasicMathDemo {
    public static void main(String[] args) {
        double a = -191.635;
        double b = 43.74;
        int c = 16, d = 45;

        System.out.printf("绝对值为 %.3f 的值是 %.3f%n", 
                          a, Math.abs(a));

        System.out.printf("大于等于 %.2f 的最小整数是 %.0f%n", 
                          b, Math.ceil(b));

        System.out.printf("小于等于 %.2f 的最大整数是 %.0f%n", 
                          b, Math.floor(b));

        System.out.printf("四舍五入 %.2f 的值是 %.0f%n", 
                          b, Math.rint(b));

        System.out.printf("%d 和 %d 中的最大值是 %d%n",
                          c, d, Math.max(c, d));

        System.out.printf("%d 和 %d 中的最小值是 %d%n",
                          c, d, Math.min(c, d));
    }
}

以下是程序的输出:

绝对值为 -191.635 的值是 191.635
大于等于 43.74 的最小整数是 44
小于等于 43.74 的最大整数是 43
四舍五入 43.74 的值是 44
16 和 45 中的最大值是 45
16 和 45 中的最小值是 16

指数和对数方法

下表列出了Math类的指数和对数方法。

指数和对数方法
方法 描述
double exp(double d) 返回自然对数的底数e的d次幂。
double log(double d) 返回参数的自然对数。
double pow(double base, double exponent) 返回第一个参数的第二个参数次幂的值。
double sqrt(double d) 返回参数的平方根。

以下程序ExponentialDemo显示了e的值,然后对任意选择的数字调用了上表中列出的每个方法:

public class ExponentialDemo {
    public static void main(String[] args) {
        double x = 11.635;
        double y = 2.76;

        System.out.printf("e 的值是 %.4f%n",
                          Math.E);

        System.out.printf("exp(%.3f) 的值是 %.3f%n",
                          x, Math.exp(x));

        System.out.printf("log(%.3f) 的值是 %.3f%n",
                          x, Math.log(x));

        System.out.printf("pow(%.3f, %.3f) 的值是 %.3f%n",
                          x, y, Math.pow(x, y));

        System.out.printf("sqrt(%.3f) 的值是 %.3f%n",
                          x, Math.sqrt(x));
    }
}

在运行ExponentialDemo时,您将看到以下输出:

e的值为2.7183
exp(11.635)为112983.831
log(11.635)为2.454
pow(11.635, 2.760)为874.008
sqrt(11.635)为3.411

三角函数方法

Math类还提供了一系列三角函数方法,这些方法总结在下表中。传递给这些方法的值是以弧度表示的角度。您可以使用toRadians方法将角度转换为弧度。

三角函数方法
方法 描述
double sin(double d) 返回指定double值的正弦值。
double cos(double d) 返回指定double值的余弦值。
double tan(double d) 返回指定double值的正切值。
double asin(double d) 返回指定double值的反正弦值。
double acos(double d) 返回指定double值的反余弦值。
double atan(double d) 返回指定double值的反正切值。
double atan2(double y, double x) 将直角坐标(x, y)转换为极坐标(r, theta)并返回theta
double toDegrees(double d)
double toRadians(double d)
将参数转换为角度或弧度。

这是一个名为TrigonometricDemo的程序,它使用这些方法来计算45度角的各种三角函数值:

public class TrigonometricDemo {
    public static void main(String[] args) {
        double degrees = 45.0;
        double radians = Math.toRadians(degrees);
        
        System.out.format("pi的值为" + " %.4f%n",
                           Math.PI);

        System.out.format("%.1f " + "度的正弦值为 %.4f%n",
                          degrees, Math.sin(radians));

        System.out.format("%.1f " + "度的余弦值为 %.4f%n",
                          degrees, Math.cos(radians));

        System.out.format("%.1f " + "度的正切值为 %.4f%n",
                          degrees, Math.tan(radians));

        System.out.format("%.4f 的反正弦值为 %.4f 度 %n", 
                          Math.sin(radians), 
                          Math.toDegrees(Math.asin(Math.sin(radians))));

        System.out.format("%.4f 的反余弦值为 %.4f 度 %n", 
                          Math.cos(radians),  
                          Math.toDegrees(Math.acos(Math.cos(radians))));

        System.out.format("%.4f 的反正切值为 %.4f 度 %n", 
                          Math.tan(radians), 
                          Math.toDegrees(Math.atan(Math.tan(radians))));
    }
}

该程序的输出如下:

π的值为3.1416
45.0度的正弦值为0.7071
45.0度的余弦值为0.7071
45.0度的正切值为1.0000
0.7071的反正弦值为45.0000度
0.7071的反余弦值为45.0000度
1.0000的反正切值为45.0000度

随机数

random()方法返回一个在0.0和1.0之间的伪随机数。范围包括0.0但不包括1.0。换句话说:0.0 <= Math.random() < 1.0。要获取不同范围的数,可以对random方法返回的值进行算术运算。例如,要生成0到9之间的整数,可以写成:

int number = (int)(Math.random() * 10);

通过将值乘以10,可能值的范围变为0.0 <= number < 10.0

当需要生成单个随机数时,使用Math.random方法效果很好。如果需要生成一系列随机数,应创建java.util.Random的实例,并调用该对象上的方法来生成数字。


上一页:格式化数字打印输出
下一页:数字总结