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

tvz2xvvm  于 2022-12-02  发布在  Java
关注(0)|答案(7)|浏览(271)

假设我有x = 12.345,在javascript中,什么函数floatToInt(x)的运行时间最快,使得floatToInt(12.345)返回12

wmomyfyw

wmomyfyw1#

很好的问题!前几天我真的要处理这个问题!写parseInt看起来像是一个后藤,但是等等!我们可以更花哨一些。
所以我们可以用位运算符来做很多事情,这似乎是一个很好的情况!假设我有你问题中的数字,12.345,我可以用位运算符'~'来反转数字中的所有位,并在这个过程中将数字转换为int!我喜欢JS。
所以现在我们有了数的反转位表示,如果我们再次'~'它,我们得到........ drum roll.........我们的数没有小数!不幸的是,它不进行舍入。

var a = 12.345;
var b = ~~a; //boom!

我们可以使用Math.round()来实现这一点。不过,您可以在JSperf上尝试一下,看看您得到的轻微加速效果!希望这对您有所帮助!

5ssjco0h

5ssjco0h2#

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

var intvalue = Math.floor( floatvalue );
var intvalue = Math.ceil( floatvalue ); 
var intvalue = Math.round( floatvalue );
14ifxucb

14ifxucb3#

只需执行:~~(x + 0.5)
干杯Z

k4emjkb1

k4emjkb14#

带零的算术OR就可以了。

> 12 === (0 | 12.245)
true
ecfsfe2w

ecfsfe2w5#

parseInt(x)执行此工作。
如果您在不知道输入是什么的情况下运行检查以查看返回值是否实际上是int。

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');
wsewodh2

wsewodh26#

如果你不关心舍入的细节,Math.trunc()是简单的、标准的和可读的。我还没有测试过性能,但是它肯定比Math.round()parseInt()好。

ndh0cuux

ndh0cuux7#

在我自己的测试中,我发现性能的经验法则是:
1.按位运算(~~num, num|0, num^0, num&0xFFFFFFFF

  1. Math方法
  2. num - (num % 1)
  3. parseInt
    位运算符的问题是在这个过程中数字会被转换成32位整数,如果这对你的用例来说是好的,那么继续。请参阅bitwise ORbitwise NOTbitwise ANDbitwise XOR上的MDN文档或它们各自的ECMAScript文档。
    parseInt函数通常比其他函数慢很多,很可能是因为它需要一个字符串作为参数。
    modulo operator的解决方案应该谨慎使用,因为它可能会咬你的屁股有时由于浮点问题,但几乎一样快的数学方法。

相关问题