最常用方法是Math.sqrt(),它高效精确,支持正数、0及特殊值,负数返回NaN;手动实现可用牛顿迭代法,适用于学习或特殊需求,需处理边界和收敛条件。

Java 中计算一个数的平方根最常用、最简单的方法是使用 Math.sqrt() 方法,它直接返回 double 类型的结果。
使用 Math.sqrt()(推荐)
这是标准库提供的高效、精确且经过充分测试的方法,适用于绝大多数场景:
- 参数为
double类型,支持正数、0 和特殊值(如NaN、正无穷); - 对负数返回
NaN(因为实数范围内无解); - 用法简洁:例如
Math.sqrt(16.0)返回4.0,Math.sqrt(2.0)返回约1.4142135623730951。
手动实现(如牛顿迭代法)
如果出于学习、面试或特殊需求(比如需要整数平方根、高精度或避免浮点误差),可以自己实现。牛顿迭代法是常用方案:
- 原理:用迭代公式
x_{n+1} = (x_n + a/x_n) / 2逼近 √a; - 初始值可取
a/2或1(a > 0); - 设置精度阈值(如
1e-10)或最大迭代次数防止死循环; - 注意处理边界:a = 0、a = 1、a
整数平方根(向下取整)
若只需要整数结果(如判断是否为完全平方数、算法题中常见),可用:
-
(int) Math.sqrt(n)—— 快速但要注意溢出和精度(对大整数如Long.MAX_VALUE可能不准); - 更安全的做法是用二分查找(在
[0, n]范围内找最大的x满足x * x ),避免浮点误差; - JDK 9+ 提供了
Math.floorDiv()等辅助方法,但整数开方仍需自行封装。
注意事项
实际使用时需留意:
- 输入为
int或long时,会自动提升为double,但大整数(如超过2^53)可能丢失精度; - 不建议对
float类型调用Math.sqrt(),应先转成double再计算; - 若需更高精度(如金融、科学计算),可考虑
BigDecimal配合自定义开方逻辑,但性能较低、实现复杂。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











