在javascript中将float转换为int的最快方法?

amb*_*ent 8 javascript performance casting numbers

让我说我有x = 12.345.在javascript中,哪个函数floatToInt(x)有最快的运行时间floatToInt(12.345)返回12

Hun*_*rex 10

好问题!前几天我实际上不得不处理这件事!它可能看起来像只是写parseInt,但等待!我们可以发烧友.

所以我们可以使用位运算符来完成很多事情,这看起来很棒!假设我有你问题中的数字,12.345,我可以使用位运算符'〜'来反转你的数字中的所有位,并在此过程中将数字转换为int!得爱JS.

所以现在我们有我们数字的倒位表示然后如果我们再次得到........ 鼓声 .........我们的数字没有小数!不幸的是,它没有做四舍五入.

var a = 12.345;
var b = ~~a; //boom!
Run Code Online (Sandbox Code Playgroud)

我们可以使用Math.round().但是你去!您可以在JSperf上试一试,看看你获得的速度有多快!希望有所帮助!

  • 因此,您为一个问题写了一个答案,要求使用“最快”的方法,而该方法在使用其他人的测试时没有显示出有意义的差异,而您没有时间自己进行测试?除了转换为 int 的“不同”方法之外,您还没有表明您的答案是什么。而且,更令我惊讶的是,OP 上钩了,并且似乎认为这是一种很好的编码方式。 (2认同)
  • @Bergi - 我看到了关于设置代码的观点.我把它更改为只分配给`resultArray`所以`testNumbers`数组永远不会受到干扰所以不需要`.slice()`它总是在随机数上运行:https://jsperf.com/float-to -int转换对比/ 30. (2认同)
  • 当心!对于“x = 10000000000”:“Math.floor(x) === x”,但是“~~x === 141006540​​8”。`Math.floor(-0.5) === -1`,但是`~~(-0.5) === 0` (2认同)

zi8*_*i88 8

就这样做:~~(x + 0.5)

干杯,Z.


Ezw*_*ard 6

与零进行算术或即可解决问题。

> 12 === (0 | 12.245)
true
Run Code Online (Sandbox Code Playgroud)


Fir*_*fog 5

这是我认为的一个很好的例子

var intvalue = Math.floor( floatvalue );
var intvalue = Math.ceil( floatvalue ); 
var intvalue = Math.round( floatvalue );
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

8242 次

最近记录:

7 年,4 月 前