我想在JavaScript中将浮点数转换为整数。实际上,我想知道如何进行两种标准转换:通过截断和舍入。而且高效,而不是通过转换为字符串和解析。
当前回答
在您的例子中,当您希望在末尾插入字符串(以便插入逗号)时,也可以只使用Number.toFixed()函数,但这将执行舍入。
其他回答
对于截断:
var intvalue = Math.floor(value);
对于圆形:
var intvalue = Math.round(value);
按位OR运算符
按位或运算符可用于截断浮点数字,它既适用于正数,也适用于负数:
function float2int (value) {
return value | 0;
}
后果
float2int(3.1) == 3
float2int(-3.1) == -3
float2int(3.9) == 3
float2int(-3.9) == -3
性能比较?
我创建了一个JSPerf测试,用于比较以下各项之间的性能:
数学下限(val)val |0位“或”~~val按位NOTparseInt(val)
这只适用于正数。在这种情况下,可以安全地使用按位运算以及Math.floor函数。
但是如果你需要你的代码同时处理正和负,那么按位操作是最快的(OR是首选)。另一个JSPerf测试与之进行了比较,很明显,由于额外的符号检查,Math现在是四个测试中速度最慢的。
Note
如注释中所述,BITWISE运算符对有符号的32位整数进行运算,因此将转换大数,例如:
1234567890 | 0 => 1234567890
12345678901 | 0 => -539222987
要截断:
//Math.ctrunk()是ES6规范的一部分console.log(数学截断(1.5));//返回1console.log(数学截断(-1.5));//返回-1//数学floor(-1.5)将返回-2,这可能不是您想要的
要舍入:
console.log(数学舍入(1.5));//2.console.log(数学舍入(1.49));//1.console.log(数学舍入(-1.6));//-2.console.log(数学舍入(-1.3));//-1.
双位not运算符可用于截断浮点数。您提到的其他操作可通过Math.floor、Math.ceil和Math.round获得。
> ~~2.5
2
> ~~(-1.4)
-1
更多细节由詹姆斯·帕多尔西提供。
函数返回小于或等于给定数字的最大整数。console.log('数学楼层:',数学楼层(3.5));console.log('数学楼层:',数学楼层(-3.5));Math.ceil()函数始终将数字舍入到下一个最大整数。console.log('Math.ceil:',Math.ceil(3.5));console.log('Math.ceil:',Math.ceil(-3.5));函数的作用是返回舍入到最接近整数的数值。console.log('Math.round:',Math.round(3.5));console.log('Math.round:',Math.round(-3.5));函数的作用是通过删除任何小数来返回数字的整数部分。console.log('Math.trunc:',Math.ttrunc(3.5));console.log('Math.trunc:',Math.ttrunc(-3.5));