如何在JavaScript中将浮点数转换为整数?
我想在JavaScript中将float转换为整数。 其实,我想知道如何做标准转换:截断和四舍五入。 有效地,不通过转换为字符串和解析。
var intvalue = Math.floor( floatvalue );
var intvalue = Math.ceil( floatvalue );
var intvalue = Math.round( floatvalue );
// `Math.trunc` was added in ECMAScript 6
var intvalue = Math.trunc( floatvalue );
数学对象引用
例子
正value = 5.5
Math.floor(value) // 5
Math.ceil(value) // 6
Math.round(value) // 6
Math.trunc(value) // 5
parseInt(value) // 5
~~value // 5
value | 0 // 5
value >> 0 // 5
value >>> 0 // 5
value - value % 1 // 5
负 value = -5.5
Math.floor(value) // -6
Math.ceil(value) // -5
Math.round(value) // -5
Math.trunc(value) // -5
parseInt(value) // -5
value | 0 // -5
~~value // -5
value >> 0 // -5
value >>> 0 // 4294967291
value - value % 1 // -5
正面 - 数字较大 value = Number.MAX_SAFE_INTEGER/10 // 900719925474099.1
Math.floor(value) // 900719925474099
Math.ceil(value) // 900719925474100
Math.round(value) // 900719925474099
Math.trunc(value) // 900719925474099
parseInt(value) // 900719925474099
value | 0 // 858993459
~~value // 858993459
value >> 0 // 858993459
value >>> 0 // 858993459
value - value % 1 // 900719925474099
负面 - 数字较大 value = Number.MAX_SAFE_INTEGER/10 * -1 // -900719925474099.1
Math.floor(value) // -900719925474100
Math.ceil(value) // -900719925474099
Math.round(value) // -900719925474099
Math.trunc(value) // -900719925474099
parseInt(value) // -900719925474099
value | 0 // -858993459
~~value // -858993459
value >> 0 // -858993459
value >>> 0 // 3435973837
value - value % 1 // -900719925474099
按位或运算符
一个按位或运算符可以用来截断浮点数字,它可以用于正数和负数:
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
函数。
但是如果你需要你的代码来处理积极和消极的话 ,那么按位操作是最快的(OR是首选)。 这另一个JSPerf测试比较相同的地方,因为附加的符号检查显然是数学现在是四个中最慢的。
注意
正如评论所述,BITWISE运营商使用带符号的32位整数,因此大量数据将被转换,例如:
1234567890 | 0 => 1234567890
12345678901 | 0 => -539222987
注意:您不能使用Math.floor()
作为截断的替代,因为Math.floor(-3.1) = -4
而不是-3
!
截断的正确替代将是:
function truncate(value)
{
if (value < 0) {
return Math.ceil(value);
}
return Math.floor(value);
}
链接地址: http://www.djcxy.com/p/66837.html
上一篇: How do I convert a float number to a whole number in JavaScript?
下一篇: convert HTML ( having Javascript ) to PDF using JavaScript