Documentation

The Java™ Tutorials
Hide TOC
Beyond Basic Arithmetic超越基本算术
Trail: Learning the Java Language
Lesson: Numbers and Strings
Section: Numbers

Beyond Basic Arithmetic超越基本算术

The Java programming language supports basic arithmetic with its arithmetic operators: +, -, *, /, and %.Java编程语言支持基本算术及其算术运算符:+-*/%The Mathclass in the java.lang package provides methods and constants for doing more advanced mathematical computation.java.lang包中的Math类提供了进行更高级数学计算的方法和常量。

The methods in the Math class are all static, so you call them directly from the class, like this:Math类中的方法都是静态的,因此可以直接从类中调用它们,如下所示:

Math.cos(angle);

Note: Using the static import language feature, you don't have to write Math in front of every math function:使用static import语言功能,您不必在每个数学函数前面写Math
import static java.lang.Math.*;

This allows you to invoke the Math class methods by their simple names.这允许您通过简单的名称调用Math类方法。For example:例如:

cos(angle);

Constants and Basic Methods常数和基本方法

The Math class includes two constants:Math类包括两个常量:

The Math class also includes more than 40 static methods.Math类还包括40多个静态方法。The following table lists a number of the basic methods.下表列出了一些基本方法。

Basic Math Methods基本Math方法
Method方法 Description描述
double abs(double d)
float abs(float f)
int abs(int i)
long abs(long lng)
Returns the absolute value of the argument.返回参数的绝对值。
double ceil(double d) Returns the smallest integer that is greater than or equal to the argument.返回大于或等于参数的最小整数。Returned as a double.作为替身返回。
double floor(double d) Returns the largest integer that is less than or equal to the argument.返回小于或等于参数的最大整数。Returned as a double.作为替身返回。
double rint(double d) Returns the integer that is closest in value to the argument.返回值与参数最接近的整数。Returned as a double.作为替身返回。
long round(double d)
int round(float f)
Returns the closest long or int, as indicated by the method's return type, to the argument.返回与参数最接近的longint,如方法的返回类型所示。
double min(double arg1, double arg2)
float min(float arg1, float arg2)
int min(int arg1, int arg2)
long min(long arg1, long arg2)
Returns the smaller of the two arguments.返回两个参数中较小的一个。
double max(double arg1, double arg2)
float max(float arg1, float arg2)
int max(int arg1, int arg2)
long max(long arg1, long arg2)
Returns the larger of the two arguments.返回两个参数中较大的一个。

The following program, BasicMathDemo , illustrates how to use some of these methods:以下程序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("The absolute value " + "of %.3f is %.3f%n", 
                          a, Math.abs(a));

        System.out.printf("The ceiling of " + "%.2f is %.0f%n", 
                          b, Math.ceil(b));

        System.out.printf("The floor of " + "%.2f is %.0f%n", 
                          b, Math.floor(b));

        System.out.printf("The rint of %.2f " + "is %.0f%n", 
                          b, Math.rint(b));

        System.out.printf("The max of %d and " + "%d is %d%n",
                          c, d, Math.max(c, d));

        System.out.printf("The min of of %d " + "and %d is %d%n",
                          c, d, Math.min(c, d));
    }
}

Here's the output from this program:以下是该程序的输出:

The absolute value of -191.635 is 191.635
The ceiling of 43.74 is 44
The floor of 43.74 is 43
The rint of 43.74 is 44
The max of 16 and 45 is 45
The min of 16 and 45 is 16

Exponential and Logarithmic Methods指数法和对数法

The next table lists exponential and logarithmic methods of the Math class.下表列出了Math类的指数和对数方法。

Exponential and Logarithmic Methods指数法和对数法
Method方法 Description描述
double exp(double d) Returns the base of the natural logarithms, e, to the power of the argument.将自然对数的底e返回到参数的幂。
double log(double d) Returns the natural logarithm of the argument.返回参数的自然对数。
double pow(double base, double exponent) Returns the value of the first argument raised to the power of the second argument.返回第一个参数的值,并将其提升为第二个参数的幂。
double sqrt(double d) Returns the square root of the argument.返回参数的平方根。

The following program, ExponentialDemo, displays the value of e, then calls each of the methods listed in the previous table on arbitrarily chosen numbers:下面的程序ExponentialDemo显示e的值,然后对任意选择的数字调用上表中列出的每个方法:

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

        System.out.printf("The value of " + "e is %.4f%n",
                          Math.E);

        System.out.printf("exp(%.3f) " + "is %.3f%n",
                          x, Math.exp(x));

        System.out.printf("log(%.3f) is " + "%.3f%n",
                          x, Math.log(x));

        System.out.printf("pow(%.3f, %.3f) " + "is %.3f%n",
                          x, y, Math.pow(x, y));

        System.out.printf("sqrt(%.3f) is " + "%.3f%n",
                          x, Math.sqrt(x));
    }
}

Here's the output you'll see when you run ExponentialDemo:以下是运行ExponentialDemo时将看到的输出:

The value of e is 2.7183
exp(11.635) is 112983.831
log(11.635) is 2.454
pow(11.635, 2.760) is 874.008
sqrt(11.635) is 3.411

Trigonometric Methods三角函数方法

The Math class also provides a collection of trigonometric functions, which are summarized in the following table.Math类还提供了三角函数的集合,下表总结了这些函数。The value passed into each of these methods is an angle expressed in radians.传递到每个方法中的值都是以弧度表示的角度。You can use the toRadians method to convert from degrees to radians.可以使用toRadians方法将度转换为弧度。

Trigonometric Methods三角函数方法
Method方法 Description描述
double sin(double d) Returns the sine of the specified double value.返回指定双精度值的正弦值。
double cos(double d) Returns the cosine of the specified double value.返回指定双精度值的余弦。
double tan(double d) Returns the tangent of the specified double value.返回指定双精度值的切线。
double asin(double d) Returns the arcsine of the specified double value.返回指定双精度值的反正弦。
double acos(double d) Returns the arccosine of the specified double value.返回指定双精度值的反余弦。
double atan(double d) Returns the arctangent of the specified double value.返回指定双精度值的反正切。
double atan2(double y, double x) Converts rectangular coordinates (x, y) to polar coordinate (r, theta) and returns theta.将直角坐标(x, y)转换为极坐标(r, theta)并返回theta
double toDegrees(double d)
double toRadians(double d)
Converts the argument to degrees or radians.将参数转换为度或弧度。

Here's a program, TrigonometricDemo, that uses each of these methods to compute various trigonometric values for a 45-degree angle:这是一个名为TrigonometricDemo的程序,它使用这些方法计算45度角的各种三角值:

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

        System.out.format("The sine of %.1f " + "degrees is %.4f%n",
                          degrees, Math.sin(radians));

        System.out.format("The cosine of %.1f " + "degrees is %.4f%n",
                          degrees, Math.cos(radians));

        System.out.format("The tangent of %.1f " + "degrees is %.4f%n",
                          degrees, Math.tan(radians));

        System.out.format("The arcsine of %.4f " + "is %.4f degrees %n", 
                          Math.sin(radians), 
                          Math.toDegrees(Math.asin(Math.sin(radians))));

        System.out.format("The arccosine of %.4f " + "is %.4f degrees %n", 
                          Math.cos(radians),  
                          Math.toDegrees(Math.acos(Math.cos(radians))));

        System.out.format("The arctangent of %.4f " + "is %.4f degrees %n", 
                          Math.tan(radians), 
                          Math.toDegrees(Math.atan(Math.tan(radians))));
    }
}

The output of this program is as follows:该程序的输出如下:

The value of pi is 3.1416
The sine of 45.0 degrees is 0.7071
The cosine of 45.0 degrees is 0.7071
The tangent of 45.0 degrees is 1.0000
The arcsine of 0.7071 is 45.0000 degrees
The arccosine of 0.7071 is 45.0000 degrees
The arctangent of 1.0000 is 45.0000 degrees

Random Numbers随机数

The random() method returns a pseudo-randomly selected number between 0.0 and 1.0.random()方法返回一个介于0.0和1.0之间的伪随机数。The range includes 0.0 but not 1.0.范围包括0.0,但不包括1.0。In other words: 0.0 <= Math.random() < 1.0.换句话说:0.0<=Math.random()<1.0To get a number in a different range, you can perform arithmetic on the value returned by the random method.要获得不同范围内的数字,可以对随机方法返回的值执行算术运算。For example, to generate an integer between 0 and 9, you would write:例如,要生成介于0和9之间的整数,可以编写:

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

By multiplying the value by 10, the range of possible values becomes 0.0 <= number < 10.0.通过将该值乘以10,可能值的范围变为0.0 <= number < 10.0

Using Math.random works well when you need to generate a single random number.当需要生成单个随机数时,使用Math.random效果很好。If you need to generate a series of random numbers, you should create an instance of java.util.Random and invoke methods on that object to generate numbers.如果需要生成一系列随机数,则应创建java.util.Random的实例,并调用该对象上的方法来生成数字。


Previous page: Formatting Numeric Print Output
Next page: Summary of Numbers