Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言特性的摘要,请参阅Java语言变更。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参阅JDK发行说明。
Java编程语言通过其算术运算符支持基本算术操作:+、-、*、/和%。在java.lang包中的Math类提供了更高级的数学计算的方法和常量。
Math类中的方法都是静态的,所以你可以直接从类中调用它们,像这样:
Math.cos(angle);
static import 语言特性,你不必在每个数学函数前面写Math:
import static java.lang.Math.*;
这允许你通过简单的名称调用Math类的方法。例如:
cos(angle);
Math类包括两个常量:
Math.E,它是自然对数的底数,和Math.PI,它是圆周与直径的比率。Math类还包括40多个静态方法。下表列出了一些基本方法。
| 方法 | 描述 |
|---|---|
double abs(double d) |
返回参数的绝对值。 |
double ceil(double d) |
返回大于或等于参数的最小整数。返回值为double类型。 |
double floor(double d) |
返回小于或等于参数的最大整数。返回值为double类型。 |
double rint(double d) |
返回与参数最接近的整数。返回值为double类型。 |
long round(double d) |
返回最接近参数的long或int,根据方法的返回类型确定。 |
double min(double arg1, double arg2) |
返回两个参数中较小的值。 |
double max(double arg1, double 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) |
将参数转换为角度或弧度。 |
这是一个名为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的实例,并调用该对象上的方法来生成数字。