假设我有 x = 12.345
。 在 JavaScript 中,哪个函数 floatToInt(x)
运行时间最快,以便 floatToInt(12.345)
返回12
?
假设我有 x = 12.345
。 在 JavaScript 中,哪个函数 floatToInt(x)
运行时间最快,以便 floatToInt(12.345)
返回12
?
很棒的问题!我前几天实际上就处理了这个问题!可能看起来只需编写parseInt,但等等!我们可以更高端一些。
因此,我们可以为许多事情使用位运算符,而这似乎是一个很好的情况!假设我有你问题中的数字12.345,我可以使用位运算符〜,它翻转数字中的所有位并在过程中将数字转换为int!JS 真是太棒了。
现在我们有了数字的反向位表示,如果我们再次'~'它,我们得到..........鼓声响起.........没有小数的数字!不幸的是,它不能四舍五入。
var a = 12.345;
var b = ~~a; //boom!
我们可以使用Math.round()来实现。但是你可以在JSperf上尝试一下,看看你能得到的轻微速度提升!希望这有所帮助!
testNumbers
,它将仅由整数组成在第一次运行之后。您需要将“slice”移动到定时区域内。但是这个想法很好,如果您不信任Math.random
,则应该能够做一些类似于这样的事情。 - BergitestNumbers
数组,我将代码更改为只分配给一个resultArray
,因此不需要.slice()
,并且它始终在随机数字上运行:https://jsperf.com/float-to-int-conversion-comparison/30。 - jfriend00x = 10000000000
时,Math.floor(x) === x
,但是 ~~x === 1410065408
。当 -0.5
时,Math.floor(-0.5) === -1
,但是 ~~(-0.5) === 0
。 - Toxiro我认为这是一个很好的例子。
var intvalue = Math.floor( floatvalue );
var intvalue = Math.ceil( floatvalue );
var intvalue = Math.round( floatvalue );
只需执行:~~(x + 0.5)
祝好,Z。
使用零进行算术 OR 运算可以解决问题。
> 12 === (0 | 12.245)
true
parseInt(x)
可以完成这项工作。
如果您正在运行检查以查看返回的值是否实际上是整数,而不知道输入内容。
x = 12.245; // Issa number
x = 'School'; // Not a number
y = parseInt(x)
if isNaN(y)
console.log('Not a number');
else
console.log('Issa number');
// Issa number
然而,使用y = ~~x
则是完全不同的情况。
x = 12.245; // Issa number
x = 'School'; // Issa number
y = ~~x;
if isNaN(y)
console.log('Not a number');
else
console.log('Issa number');
Math.round
(或Math.floor
,取决于您的需要)。 - Bergi