A Guide to the Java Math Class – Java数学类指南

最后修改: 2018年 11月 21日

中文/混合/英文(键盘快捷键:t)

1. Introduction

1.介绍

In this tutorial, we’re going to describe the Math class that provides helpful static methods for performing numeric operations such as exponential, logarithm, etc.

在本教程中,我们将介绍Math类,它为执行指数、对数等数字运算提供有用的静态方法。

2. Basic Math Functions

2.基本数学功能

The first set of methods we’ll cover are the basic math functions such as the absolute value, the square root, the maximum or the minimum between two values.

我们要介绍的第一组方法是基本的数学函数,如绝对值、平方根、两个值之间的最大值或最小值。

2.1. abs()

2.1.abs()

The abs() method returns the absolute value of a given value:

abs()方法返回一个给定值的绝对值。

Math.abs(-5); // returns 5

Likewise, of others that we’ll see next, abs() accepts as a parameter an int, long, float or double and returns the relative one.

同样地,在我们接下来要看到的其他参数中,abs()接受一个int、long、floatdouble作为参数,并返回相对的那个。

2.2. pow()

2.2.pow()

Calculates and returns the value of the first argument raised to the power of the second one:

计算并返回第一个参数的值,并将其提高到第二个参数的幂。

Math.pow(5,2); // returns 25

We discuss this method in more detail in here.

我们在这里更详细地讨论这个方法。

2.3. sqrt()

2.3.sqrt()

Returns the rounded positive square root of a double:

返回一个double的四舍五入正平方根。

Math.sqrt(25); // returns 5

If the argument is NaN or less than zero, the result is NaN.

如果参数是NaN或小于0,结果是NaN

2.4. cbrt()

2.4.cbrt()

Similarly, cbrt() returns the cube root of a double:

类似地,cbrt()返回double的立方根。

Math.cbrt(125); // returns 5

2.5. max()

2.5.max()

As the method’s name suggests, it returns the maximum between two values:

正如该方法的名称所示,它返回两个值之间的最大值。

Math.max(5,10); // returns 10

Here again, the method accepts int, long, float or double.

在这里,该方法同样接受int, long, floatdouble

2.6. min() 

2.6.min()

In the same way, min() returns the minimum between two values:

以同样的方式,min()返回两个值之间的最小值。

Math.min(5,10); // returns 5

2.7. random()

2.7.random()

Returns a pseudorandomly double greater than or equal to 0.0 and less than 1.0:

返回一个大于或等于0.0且小于1.0的伪随机double

double random = Math.random()

To do this, the method creates a single instance of java.util.Random() number generator when it is called for the first time. 

为此,该方法在首次调用时创建了一个java.util.Random() 数字生成器的实例。

After that, for all calls to this method, the same instance is used. Note that, the method is synchronized, thus can be used by more than one thread.

之后,对这个方法的所有调用,都是使用同一个实例。注意,这个方法是同步的,因此可以被多个线程使用。

We can find more examples of how to generate a random in this article.

我们可以在这篇文章中找到更多关于如何生成随机的例子

2.8. signum()

2.8.signum()

Is useful when we have to know the value’s sign:

当我们需要知道数值的符号时,是很有用的。

Math.signum(-5) // returns -1

This method returns 1.0 if the argument is greater than zero or -1.0 otherwise. If the argument is zero positive or zero negative, the result is the same as the argument.

如果参数大于0,该方法返回1.0,否则返回-1.0。如果参数为零正或零负,则结果与参数相同。

The input can be a float or a double.

输入可以是一个浮点或一个双倍数

2.9. copySign()

2.9.copySign()

Accepts two parameters and returns the first argument with the sign of the second argument:

接受两个参数,并返回第一个参数和第二个参数的符号。

Math.copySign(5,-1); // returns -5

Arguments can also be float or double.

参数也可以是floatdouble.

3. Exponential and Logarithmic Functions

3.指数和对数函数

In addition to the basic math functions, the Math class contains methods to solve exponential and logarithmic functions.

除了基本的数学函数外,数学类还包含解决指数和对数函数的方法。

3.1. exp()

3.1.exp()

The exp() method receives a double argument and returns Euler’s number raised to the power of the argument (ex):

exp()方法接收一个double参数,并返回提升到参数幂的Euler数(ecode>x)。

Math.exp(1); // returns 2.718281828459045

3.2. expm1()

3.2.expm1()

Similar to the above method, expm1() computes the Euler’s number raised to the power of the argument received, but it adds -1 (ex -1):

与上述方法类似,expm1()计算欧拉数提高到收到的参数的幂,但它添加了-1(ecode>x-1)。

Math.expm1(1); // returns 1.718281828459045

3.3. log()

3.3.log()

Returns the natural logarithm of a double value:

返回double值的自然对数。

Math.log(Math.E); // returns 1

3.4. log10()

3.4.log10()

It returns the logarithm in base 10 of the argument:

它返回参数的以10为底的对数。

Math.log10(10); // returns 1

3.5. log1p()

3.5.log1p()

Likewise the log(), but it adds 1 to the argument ln(1 + x):

同样,log(),但它在参数ln(1 + x)上加了1。

Math.log1p(Math.E); // returns 1.3132616875182228

4. Trigonometric Functions

4.三角函数

When we have to work with geometric formulas, we always need trigonometric functions; the Math class provides these for us.

当我们必须处理几何公式时,我们总是需要三角函数;Math类为我们提供了这些。

4.1. sin()

4.1. sin()

Receives a single, double argument that represents an angle (in radians) and returns the trigonometric sine:

接收一个代表角度(弧度)的单个double参数,并返回三角正弦。

Math.sin(Math.PI/2); // returns 1

4.2. cos()

4.2.cos()

In the same way, cos() returns the trigonometric cosine of an angle (in radians):

同样,cos()返回一个角度的三角余弦(单位:弧度)。

Math.cos(0); // returns 1

4.3. tan()

4.3.tan()

Returns the trigonometric tangent of an angle (in radians):

返回一个角度的三角正切值(单位:弧度)。

Math.tan(Math.PI/4); // returns 1

4.4. sinh(), cosh(), tanh()

4.4. sinh(), cosh(), tanh()

They return respectively the hyperbolic sine, hyperbolic cosine and hyperbolic tangent of a double value:

它们分别返回一个double值的双曲正弦、双曲余弦和双曲正切:

Math.sinh(Math.PI);

Math.cosh(Math.PI);

Math.tanh(Math.PI);

4.5. asin()

4.5.asin()

Returns the arc sine of the argument received:

返回收到的参数的正弦弧度。

Math.asin(1); // returns pi/2

The result is an angle in the range –pi/2 to pi/2.

结果是一个在-pi/2到pi/2范围内的角度。

4.6. acos()

4.6.acos()

Returns the arc cosine of the argument received:

返回收到的参数的弧形余弦。

Math.acos(0); // returns pi/2

The result is an angle in the range 0 to pi.

其结果是一个在0到pi范围内的角度。

4.7. atan()

4.7.atan()

Returns the arc tangent of the argument received:

返回收到的参数的正切弧线。

Math.atan(1); // returns pi/4

The result is an angle in the range –pi/2 to pi/2.

结果是一个在-pi/2到pi/2范围内的角度。

4.8. atan2()

4.8.atan2()

Finally, atan2() receives the ordinate coordinate y and the abscissa coordinate x, and returns the angle ϑ from the conversion of rectangular coordinates (x,y) to polar coordinates (r, ϑ):

最后,atan2()接收序数坐标y和尾数坐标x,,并返回矩形坐标(x,y)转换为极坐标(r, ϑ)的角度ϑ。

Math.atan2(1,1); // returns pi/4

4.9. toDegrees()

4.9.toDegrees()

This method is useful when we need to convert radians to degrees:

当我们需要将弧度转换为度数时,这种方法很有用。

Math.toDegrees(Math.PI); // returns 180

4.10. toRadians()

4.10.toRadians()

On the other hand toRadians() is useful to do the opposite conversion:

另一方面,toRadians()对于做相反的转换很有用。

Math.toRadians(180); // returns pi

Remember that most of the methods we have seen in this section accept the argument in radians, thus, when we have an angle in degrees, this method should be used before using a trigonometric method.

请记住,我们在本节中看到的大多数方法都接受以弧度为单位的参数,因此,当我们有一个以度为单位的角度时,应该在使用三角法之前使用这种方法。

For more examples, have a look in here.

关于更多的例子,请看这里

5. Rounding and Other Functions

5.四舍五入和其他功能

Finally, let’s have a look at rounding methods.

最后,让我们看一下四舍五入的方法。

5.1. ceil()

5.1.ceil()

ceil() is helpful when we have to round an integer to the smallest double value that is greater than or equal to the argument:

ceil()在我们必须将一个整数四舍五入到大于或等于参数的最小double值时很有帮助。

Math.ceil(Math.PI); // returns 4

In this article, we use this method to round up a number to the nearest hundred.

这篇文章中,我们用这种方法将一个数字四舍五入到最接近的一百。

5.2. floor()

5.2.floor()

To round a number to the largest double that is less than or equal to the argument we should use floor():

要将一个数字四舍五入到小于或等于参数的最大double,我们应该使用floor()

Math.floor(Math.PI); // returns 3

5.3. getExponent()

5.3.getExponent()

Returns an unbiased exponent of the argument.

返回参数的无偏指数。

The argument can be a double or a float:

参数可以是一个double或一个float

Math.getExponent(333.3); // returns 8

Math.getExponent(222.2f); // returns 7

5.4. IEEEremainder()

5.4.IEEEremainder()

Computes the division between the first (dividend) and the second (divisor) argument and returns the remainder as prescribed by the IEEE 754 standard:

计算第一个(红利)和第二个(除数)参数之间的除法,并按照IEEE 754标准的规定返回余数。

Math.IEEEremainder(5,2); // returns 1

5.5. nextAfter()

5.5.nextAfter()

This method is useful when we need to know the neighboring of a double or a float value:

当我们需要知道一个double或一个float值的邻接时,这个方法很有用。

Math.nextAfter(1.95f,1); // returns 1.9499999

Math.nextAfter(1.95f,2); // returns 1.9500002

It accepts two arguments, the first is the value of which you want to know the adjacent number and the second is the direction.

它接受两个参数,第一个是你想知道的相邻数的值,第二个是方向。

5.6. nextUp()

5.6.nextUp()

Likewise the previous method, but this one returns the adjacent value only in the direction of a positive infinity:

同上一个方法一样,但这个方法只在正无穷大的方向上返回相邻的值。

Math.nextUp(1.95f); // returns 1.9500002

5.7. rint()

5.7.rint()

Returns a double that is the closest integer value of the argument:

返回一个double,是参数的最接近的整数值。

Math.rint(1.95f); // returns 2.0

5.8. round()

5.8.round()

Equally to the above method, but this one returns an int value if the argument is a float and a long value if the argument is a double:

与上面的方法相同,但是如果参数是一个float,这个方法返回一个int值,如果参数是一个double,则返回一个long值:。

int result = Math.round(1.95f); // returns 2

long result2 = Math.round(1.95) // returns 2

5.9. scalb()

5.9.scalb()

Scalb is an abbreviation for a “scale binary”. This function executes one shift, one conversion and a double multiplication:

Scalb是 “刻度二进制 “的缩写。这个函数执行一次移位,一次转换和一次双倍乘法。

Math.scalb(3, 4); // returns 3*2^4

5.10. ulp()

5.10.ulp()

The ulp() method returns the distance from a number to its nearest neighbors:

ulp()方法返回一个数字与它最近的邻居之间的距离。

Math.ulp(1); // returns 1.1920929E-7
Math.ulp(2); // returns 2.3841858E-7
Math.ulp(4); // returns 4.7683716E-7
Math.ulp(8); // returns 9.536743E-7

5.11. hypot()

5.11.hypot()

Returns the square root of the sum of squares of its argument:

返回其参数的平方根之和。

Math.hypot(4, 3); // returns 5

The method calculates the square root without intermediate overflow or underflow.

该方法计算平方根时没有中间的溢出或下溢。

In this article, we use this method to calculate the distance between two points.

本文中,我们使用这种方法来计算两点之间的距离。

6. Java 8 Math Functions

6.Java 8的数学函数

The Math class has been revisited in Java 8 to include new methods to perform the most common arithmetic operations.

在Java 8中重新审视了Math 类,以包括执行最常见算术运算的新方法。

We discussed these methods in another article.

我们在另一篇文章中讨论了这些方法

7. Constants Fields

7.常量字段

In addition to the methods, Math class declares two constant fields:

除了这些方法,Math类还声明了两个常量字段。

public static final double E

public static final double PI

Which indicate the closer value to the base of the natural logarithms, and the closer value to pi, respectively.

分别表示与自然对数的基数比较接近的数值,以及与pi比较接近的数值。

8. Conclusion

8.结论

In this article, we’ve described the APIs that Java provides for mathematical operations.

在这篇文章中,我们已经描述了Java为数学运算提供的API。

As usual, all code snippets presented in here are available over on GitHub.

像往常一样,这里介绍的所有代码片段都可以在GitHub上找到