12

我已经通过谷歌搜索(也许我看起来不够努力)但我找不到如何将 Math.sqrt 变成 int。

我想将 Math.sqrt 用于for循环,我想我需要它作为 int 但我似乎无法弄清楚如何将结果转换为 int。那么我该怎么做呢?

我尝试了类似于 Java 的东西:

(int) Math.sqrt(num);

但它没有用。

提前致谢 :)

4

5 回答 5

25

使用Math.roundMath.ceil或 ,Math.floor具体取决于您的特定舍入需要。

“对于将数字舍入为整数,Math.round、Math.ceil 和 Math.floor 之一是可取的,对于可以表示为 32 位有符号整数的所需结果,下面描述的按位运算也可能适用。”

- http://www.jibbering.com/faq/faq_notes/type_convert.html#tcNumber

于 2009-02-01T05:40:06.820 回答
5

有人建议使用 parseInt。这从一个字符串到一个 int,但很容易将一个浮点数变成一个字符串。

parseInt(Math.sqrt(num)+"")

请记住,无论您做什么,JavaScript 总是使用浮点数。没有整数类型。

于 2009-02-01T05:53:18.120 回答
4

Math.floor 会做到这一点。不过,怀疑你甚至需要去一个整数。

Math.floor(Math.sqrt(num));
于 2009-02-01T05:44:48.670 回答
3

usingparseInt(Math.sqrt(num)+"")比 using 慢Math.round(Math.sqrt(num))。我认为这是因为在第一个示例中,您正在创建字符串、解析整数值num并对其进行舍入。在第二个示例中,您只需采用 int 并对其进行舍入。

于 2012-04-28T03:11:10.683 回答
1

我知道这是一个老问题,但我想为以后发现这个问题的人提供帮助......

我不会重申其他答案所说的内容,但是您可以做的一个有趣的小技巧是:

Math.sqrt(2); //1.41......
~~Math.sqrt(2); //1

双位负数会去掉小数点后的任何内容。有人告诉我它稍微快一点,但我并不完全相信。

编辑:作为注释,这将向 0 舍入。

于 2013-01-16T10:02:08.920 回答