猿问
如何在JavaScript中将浮点数转换为整数?
我想在JavaScript中将float转换为整数。实际上,我想知道如何同时执行标准转换:截断和舍入。并且有效,而不是通过转换为字符串和解析。
森林海
浏览 928
回答 3
3回答
神不在的星期二
var intvalue = Math.floor( floatvalue );var intvalue = Math.ceil( floatvalue ); var intvalue = Math.round( floatvalue );// `Math.trunc` was added in ECMAScript 6var intvalue = Math.trunc( floatvalue );数学对象参考例子正// value=x // x=5 5<x<5.5 5.5<=x<6 Math.floor(value) // 5 5 5Math.ceil(value) // 5 6 6Math.round(value) // 5 5 6Math.trunc(value) // 5 5 5parseInt(value) // 5 5 5~~value // 5 5 5value | 0 // 5 5 5value >> 0 // 5 5 5value >>> 0 // 5 5 5value - value % 1 // 5 5 5负// value=x // x=-5 -5>x>=-5.5 -5.5>x>-6Math.floor(value) // -5 -6 -6Math.ceil(value) // -5 -5 -5Math.round(value) // -5 -5 -6Math.trunc(value) // -5 -5 -5parseInt(value) // -5 -5 -5value | 0 // -5 -5 -5~~value // -5 -5 -5value >> 0 // -5 -5 -5value >>> 0 // 4294967291 4294967291 4294967291value - value % 1 // -5 -5 -5积极 - 更大的数字// x = Number.MAX_SAFE_INTEGER/10 // =900719925474099.1// value=x x=900719925474099 x=900719925474099.4 x=900719925474099.5Math.floor(value) // 900719925474099 900719925474099 900719925474099Math.ceil(value) // 900719925474099 900719925474100 900719925474100Math.round(value) // 900719925474099 900719925474099 900719925474100Math.trunc(value) // 900719925474099 900719925474099 900719925474099parseInt(value) // 900719925474099 900719925474099 900719925474099value | 0 // 858993459 858993459 858993459~~value // 858993459 858993459 858993459value >> 0 // 858993459 858993459 858993459value >>> 0 // 858993459 858993459 858993459value - value % 1 // 900719925474099 900719925474099 900719925474099否定 - 更大的数字// x = Number.MAX_SAFE_INTEGER/10 * -1 // -900719925474099.1// value = x // x=-900719925474099 x=-900719925474099.5 x=-900719925474099.6Math.floor(value) // -900719925474099 -900719925474100 -900719925474100Math.ceil(value) // -900719925474099 -900719925474099 -900719925474099Math.round(value) // -900719925474099 -900719925474099 -900719925474100Math.trunc(value) // -900719925474099 -900719925474099 -900719925474099parseInt(value) // -900719925474099 -900719925474099 -900719925474099value | 0 // -858993459 -858993459 -858993459~~value // -858993459 -858993459 -858993459value >> 0 // -858993459 -858993459 -858993459value >>> 0 // 3435973837 3435973837 3435973837value - value % 1 // -900719925474099 -900719925474099 -900719925474099
0
0
0
回首忆惘然
按位OR运算符按位或运算符可用于截断浮点数,它适用于正数和负数:function float2int (value) { return value | 0;}结果float2int(3.1) == 3float2int(-3.1) == -3float2int(3.9) == 3float2int(-3.9) == -3性能比较?我创建了一个JSPerf测试,用于比较以下各项之间的性能:Math.floor(val)val | 0 按位OR~~val 按位NOTparseInt(val)只适用于正数。在这种情况下,您可以安全地使用按位运算和Math.floor函数。但是,如果您需要使用代码来处理正数和负数,那么按位运算是最快的(OR是首选运算)。这个其他JSPerf测试比较相同的地方很明显,因为额外的符号检查Math现在是四个中最慢的。注意如评论中所述,BITWISE运算符在带符号的32位整数上运算,因此将转换大数字,例如:1234567890 | 0 => 123456789012345678901 | 0 => -539222987
0
0
0
ITMISS
注意:您不能Math.floor()用作截断的替代品,因为Math.floor(-3.1) = -4而不是-3!!截断的正确替换将是:function truncate(value){ if (value < 0) { return Math.ceil(value); } return Math.floor(value);}
0
0
0
随时随地看视频
慕课网APP
相关分类
JavaScript
我要回答