没有强制转换的Java Square Root Integer操作?

use*_*661 15 java

Math.sqrt()函数将double作为参数并返回double.我正在使用一个在所有情况下都使用完美方格的程序,我需要以整数形式获得平方根.是唯一的方法来执行此操作将参数转换为a int然后返回一个int双重的?

Pat*_*han 25

施法技术比初看起来要好得多.

从int到double的转换是准确的.

对于正常正数,Math.sqrt被指定为返回"最接近参数值的真数学平方根的双精度值".如果输入是完美的方形int,则结果将是int范围内的整数值double.

类似地,将整数值double转换回int也是精确的.

实际效果是,施法技术不会在您的情况下引入任何舍入误差.

如果您的程序将从使用Guava intMath API中受益,您可以使用它来执行平方根,但我不会为了避免强制转换而添加对API的依赖.


Ami*_*ani 10

您始终可以使用Google Guava IntMath API.

final int sqrtX = IntMath.sqrt(x, RoundingMode.HALF_EVEN);
Run Code Online (Sandbox Code Playgroud)

  • Guava只使用`(int)Math.sqrt(x)`然后修复舍入,如果你没有向下舍入.([源(https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/math/IntMath.java?r=46c545d7a79d375e37cc077aff8df7f72fd8a126)) (3认同)