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
的实例,并调用该对象上的方法来生成数字。