我想在JavaScript中将浮点数转换为整数。 实际上,我想知道如何同时进行标准转换:截断和舍入。 而且有效,而不是通过转换为字符串和解析。
#1楼
按位或运算符
可以使用按位或运算符截断浮点数,它既可以用于正数也可以用于负数:
function float2int (value) {
return value | 0;
}
结果
float2int(3.1) == 3
float2int(-3.1) == -3
float2int(3.9) == 3
float2int(-3.9) == -3
性能比较?
我创建了一个JSPerf测试 ,用于比较以下两者之间的性能:
-
Math.floor(val)
-
val | 0
val | 0
按位或 -
~~val
按位非 -
parseInt(val)
仅适用于正数。 在这种情况下,可以安全地使用按位运算以及Math.floor
函数。
但是,如果您需要代码同时使用正数和负数 ,那么按位运算是最快的(或首选)。 另一个JSPerf测试进行了比较,很明显,由于附加的符号检查, Math现在是这四个中最慢的。
注意
如评论中所述,BITWISE运算符对带符号的32位整数进行运算,因此将转换大数,例如:
1234567890 | 0 => 1234567890
12345678901 | 0 => -539222987
#2楼
注意:您不能使用Math.floor()
来代替截断,因为Math.floor(-3.1) = -4
而不是-3
!
截断的正确替代是:
function truncate(value)
{
if (value < 0) {
return Math.ceil(value);
}
return Math.floor(value);
}
#3楼
在您的情况下,当您想要一个字符串结尾(以便插入逗号)时,也可以只使用Number.toFixed()函数,但是,它将执行舍入操作。