JavaScript:如何将Math.sqrt转换为整数?

12

我在谷歌上搜索过(也许没有找够),但我找不到如何将Math.sqrt转换为整数的方法。

我想在一个for循环中使用Math.sqrt,但我需要它作为整数,但我似乎无法强制转换结果为int。那么我该怎么做呢?

我尝试了类似Java的方法:

(int) Math.sqrt(num);

但是它没有起作用。

提前致谢 :)

5个回答

25

根据您特定的舍入需求,使用 Math.roundMath.ceilMath.floor

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

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


5

有人建议使用parseInt。它可以将字符串转换为整数,但将浮点数转换为字符串也很容易。

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

请记住,无论您做什么,JavaScript始终在使用浮点数。它没有整数类型。


不要重新发布问题,而是编辑您之前的问题。 - Luca Matteis
抱歉,当时我似乎没有足够的声望来评论那个人的答案,这正是我想做的。 - Nosredna
1
我认为给出负面评价是不合适的,因为Nosredna没有足够的声望来发表评论。中立化处理。 - Cerebrus
实际上,JavaScript 的数字类型是 double,而不是 float。 - Georg Schölly
1
gs,好的谢谢。ECMAScript使用的浮点规范是IEEE-754双精度浮点数。我曾经在博客上写过一篇关于它的文章,你会认为我会记得。http://dreaminginjavascript.wordpress.com/2008/07/15/9007199254740992/ - Nosredna

4

使用Math.floor即可。不过,你甚至不需要转换为整数。

Math.floor(Math.sqrt(num));

3

parseInt(Math.sqrt(num)+"") 的速度比 Math.round(Math.sqrt(num)) 更慢。我认为这是因为在第一个例子中,你需要创建一个字符串,解析整数值 num 并对其进行舍入;而在第二个例子中,你只需要获取整数并对其进行舍入。


1

我知道这是一个老问题,但我认为对于任何后来发现这个问题的人都有帮助...

我不会重复其他答案所说的内容,但你可以尝试一个有趣的小技巧:

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

双位元负数运算会舍去小数点后的所有内容。有人告诉我这样会稍微快一些,但我并不完全相信。

编辑:需要注意的是,这将向0四舍五入。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接