Java Math Class
Perform common mathematical operations in Java with Math.abs, Math.sqrt, Math.pow, Math.random, and other static methods.
The java.lang.Math class is a collection of static methods for the math operations that go beyond the basic +, -, *, /, % operators. Absolute values, powers, roots, trigonometry, logarithms, rounding, and random numbers all live here. Because Math is in the java.lang package, it is implicitly imported — you never write an import statement, you just call the methods directly: Math.sqrt(2).
This page walks through each group of methods, shows the exact value they return, and points out the gotchas (which methods return double vs long, why trig works in radians, and when Math is the wrong tool). Every method is static, so you call it on the class itself, never on an instance.
Absolute value, min, max
Math.abs(-7); // 7
Math.abs(-3.14); // 3.14
Math.min(3, 5); // 3
Math.max(3, 5); // 5
Math.min(1.5, 1.7); // 1.5All four are overloaded for int, long, float, and double.
Powers and roots
Math.pow(2, 10); // 1024.0 — always returns double
Math.sqrt(2); // 1.4142135623730951
Math.cbrt(27); // 3.0
Math.exp(1); // 2.718281828... — e^xFor integer exponents, Math.pow is overkill — a loop or << is faster.
Logarithms
Math.log(Math.E); // 1.0 — natural log (ln)
Math.log10(1000); // 3.0 — base-10 log
Math.log(8) / Math.log(2); // 3.0 — log base 2Java has no built-in "log base N" method, so you compute it with the change-of-base rule: Math.log(x) / Math.log(base). For tighter precision near x = 1, Math.log1p(x) computes ln(1 + x) and Math.expm1(x) computes e^x - 1 without losing significant digits.
Rounding
| Method | Behavior |
|---|---|
Math.floor(x) | round down (toward -∞), returns double |
Math.ceil(x) | round up (toward +∞), returns double |
Math.round(x) | round to nearest, ties round up; returns long for double, int for float |
Math.rint(x) | round to nearest, ties round to even; returns double |
Math.floor(2.7); // 2.0
Math.ceil(2.1); // 3.0
Math.round(2.5); // 3 — ties round up
Math.round(-2.5); // -2 — toward positive infinity
Math.rint(0.5); // 0.0 — banker's rounding
Math.rint(1.5); // 2.0For decimal-aware rounding (e.g., to two decimal places for money), use BigDecimal with a RoundingMode.
Trigonometry
All trig functions work in radians. Convert with Math.toRadians / Math.toDegrees:
Math.sin(Math.PI / 2); // 1.0
Math.cos(0); // 1.0
Math.tan(Math.PI / 4); // 0.999999... (≈ 1)
Math.toRadians(180); // Math.PI
Math.toDegrees(Math.PI); // 180.0
Math.atan2(1, 1); // π/4 — handles quadrant correctlyMath.atan2(y, x) is the right tool for "what's the angle of this vector," not Math.atan(y/x).
Constants
Math.PI; // 3.141592653589793
Math.E; // 2.718281828459045Random numbers
Math.random() returns a double uniformly in [0.0, 1.0):
double r = Math.random(); // 0.0 ≤ r < 1.0
int dieRoll = 1 + (int)(Math.random() * 6); // 1..6For anything more (seeded, repeatable, ranges, gaussians), use java.util.Random or java.util.concurrent.ThreadLocalRandom:
import java.util.Random;
Random rng = new Random(42); // seeded, reproducible
int n = rng.nextInt(100); // 0..99
double g = rng.nextGaussian(); // normal distributionFor security tokens, don't use Math.random or Random — use java.security.SecureRandom.
Overflow-checked arithmetic
Math.addExact, subtractExact, multiplyExact, negateExact, incrementExact, decrementExact throw ArithmeticException on integer overflow:
Math.addExact(Integer.MAX_VALUE, 1); // throws ArithmeticExceptionUseful when correctness matters more than speed.
A demonstration
What's next
- Java Operators — the
+,-,*,/,%arithmetic thatMathbuilds on. - Java Data Types — why
Math.powreturnsdoubleand when anintoverflows. - Java User Input with Scanner — reading numbers and text from the terminal.