java中如何求平方根
使用 Math.sqrt() 方法
在 Java 中,Math.sqrt() 是计算平方根的最直接方法。该方法接受一个 double 类型的参数,并返回其平方根,结果也是 double 类型。
double number = 25.0;
double squareRoot = Math.sqrt(number);
System.out.println("平方根: " + squareRoot); // 输出 5.0
处理负数输入
Math.sqrt() 对负数会返回 NaN(Not a Number)。可以通过条件判断避免无效输入:
double number = -25.0;
if (number >= 0) {
double squareRoot = Math.sqrt(number);
System.out.println("平方根: " + squareRoot);
} else {
System.out.println("负数无实数平方根");
}
使用牛顿迭代法(自定义实现)
若需手动实现平方根算法,牛顿迭代法是一种高效方法。以下是一个简单实现:
public static double sqrtNewton(double number) {
if (number < 0) return Double.NaN;
double epsilon = 1e-10; // 精度阈值
double guess = number;
while (Math.abs(guess * guess - number) > epsilon) {
guess = (guess + number / guess) / 2.0;
}
return guess;
}
使用 BigDecimal 高精度计算
对于需要高精度的场景,BigDecimal 结合牛顿迭代法可实现更精确的结果:

import java.math.BigDecimal;
import java.math.RoundingMode;
public static BigDecimal sqrtBigDecimal(BigDecimal number, int scale) {
if (number.compareTo(BigDecimal.ZERO) < 0) {
throw new ArithmeticException("负数无实数平方根");
}
BigDecimal guess = number.divide(BigDecimal.valueOf(2), scale, RoundingMode.HALF_UP);
BigDecimal epsilon = BigDecimal.valueOf(1, scale);
while (guess.multiply(guess).subtract(number).abs().compareTo(epsilon) > 0) {
guess = guess.add(number.divide(guess, scale, RoundingMode.HALF_UP))
.divide(BigDecimal.valueOf(2), scale, RoundingMode.HALF_UP);
}
return guess;
}
性能与精度对比
Math.sqrt():最快且满足大多数场景,但精度固定为double类型限制。- 牛顿迭代法:适合自定义精度或教学目的,性能次于原生方法。
BigDecimal:适用于金融等需要高精度的领域,但计算开销较大。
根据需求选择合适的方法即可。



