我在谷歌上搜索过(也许没有找够),但我找不到如何将Math.sqrt转换为整数的方法。
我想在一个for循环中使用Math.sqrt,但我需要它作为整数,但我似乎无法强制转换结果为int。那么我该怎么做呢?
我尝试了类似Java的方法:
(int) Math.sqrt(num);
但是它没有起作用。
提前致谢 :)
我在谷歌上搜索过(也许没有找够),但我找不到如何将Math.sqrt转换为整数的方法。
我想在一个for循环中使用Math.sqrt,但我需要它作为整数,但我似乎无法强制转换结果为int。那么我该怎么做呢?
我尝试了类似Java的方法:
(int) Math.sqrt(num);
但是它没有起作用。
提前致谢 :)
根据您特定的舍入需求,使用 Math.round
、Math.ceil
或 Math.floor
。
"对于将数字舍入为整数,Math.round、Math.ceil 和 Math.floor 中的一个是首选,对于可以表示为32位有符号整数的所需结果,下面描述的位运算也可能适用。"
-http://www.jibbering.com/faq/faq_notes/type_convert.html#tcNumber
有人建议使用parseInt。它可以将字符串转换为整数,但将浮点数转换为字符串也很容易。
parseInt(Math.sqrt(num)+"")
请记住,无论您做什么,JavaScript始终在使用浮点数。它没有整数类型。
使用Math.floor即可。不过,你甚至不需要转换为整数。
Math.floor(Math.sqrt(num));
parseInt(Math.sqrt(num)+"")
的速度比 Math.round(Math.sqrt(num))
更慢。我认为这是因为在第一个例子中,你需要创建一个字符串,解析整数值 num
并对其进行舍入;而在第二个例子中,你只需要获取整数并对其进行舍入。
我知道这是一个老问题,但我认为对于任何后来发现这个问题的人都有帮助...
我不会重复其他答案所说的内容,但你可以尝试一个有趣的小技巧:
Math.sqrt(2); //1.41......
~~Math.sqrt(2); //1
双位元负数运算会舍去小数点后的所有内容。有人告诉我这样会稍微快一些,但我并不完全相信。
编辑:需要注意的是,这将向0四舍五入。