如何在JavaScript中将浮点数转换为整数?

我想在JavaScript中将float转换为整数。实际上,我想知道如何同时执行标准转换:截断和舍入。并且有效,而不是通过转换为字符串和解析。



森林海
浏览 928回答 3
3回答

神不在的星期二

var intvalue = Math.floor( floatvalue );var intvalue = Math.ceil( floatvalue );&nbsp;var intvalue = Math.round( floatvalue );// `Math.trunc` was added in ECMAScript 6var intvalue = Math.trunc( floatvalue );数学对象参考例子正// value=x&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; x=5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5<x<5.5&nbsp; &nbsp; &nbsp; 5.5<=x<6&nbsp;&nbsp;Math.floor(value) //&nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5Math.ceil(value)&nbsp; //&nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 6&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 6Math.round(value) //&nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 6Math.trunc(value) //&nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5parseInt(value)&nbsp; &nbsp;//&nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5~~value&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//&nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5value | 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//&nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5value >> 0&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5value >>> 0&nbsp; &nbsp; &nbsp; &nbsp;//&nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5value - value % 1 //&nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 5负// value=x&nbsp; &nbsp; &nbsp; &nbsp; // x=-5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5>x>=-5.5&nbsp; &nbsp;-5.5>x>-6Math.floor(value) // -5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-6&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-6Math.ceil(value)&nbsp; // -5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5Math.round(value) // -5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-6Math.trunc(value) // -5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5parseInt(value)&nbsp; &nbsp;// -5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5value | 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// -5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5~~value&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// -5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5value >> 0&nbsp; &nbsp; &nbsp; &nbsp; // -5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5value >>> 0&nbsp; &nbsp; &nbsp; &nbsp;// 4294967291&nbsp; &nbsp;4294967291&nbsp; &nbsp;4294967291value - value % 1 // -5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-5积极 - 更大的数字// x = Number.MAX_SAFE_INTEGER/10 // =900719925474099.1// value=x&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x=900719925474099&nbsp; &nbsp; x=900719925474099.4&nbsp; x=900719925474099.5Math.floor(value) //&nbsp; 900719925474099&nbsp; &nbsp; &nbsp; 900719925474099&nbsp; &nbsp; &nbsp; 900719925474099Math.ceil(value)&nbsp; //&nbsp; 900719925474099&nbsp; &nbsp; &nbsp; 900719925474100&nbsp; &nbsp; &nbsp; 900719925474100Math.round(value) //&nbsp; 900719925474099&nbsp; &nbsp; &nbsp; 900719925474099&nbsp; &nbsp; &nbsp; 900719925474100Math.trunc(value) //&nbsp; 900719925474099&nbsp; &nbsp; &nbsp; 900719925474099&nbsp; &nbsp; &nbsp; 900719925474099parseInt(value)&nbsp; &nbsp;//&nbsp; 900719925474099&nbsp; &nbsp; &nbsp; 900719925474099&nbsp; &nbsp; &nbsp; 900719925474099value | 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//&nbsp; 858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 858993459~~value&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;//&nbsp; 858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 858993459value >> 0&nbsp; &nbsp; &nbsp; &nbsp; //&nbsp; 858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 858993459value >>> 0&nbsp; &nbsp; &nbsp; &nbsp;//&nbsp; 858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 858993459value - value % 1 //&nbsp; 900719925474099&nbsp; &nbsp; &nbsp; 900719925474099&nbsp; &nbsp; &nbsp; 900719925474099否定 - 更大的数字// x = Number.MAX_SAFE_INTEGER/10 * -1 // -900719925474099.1// value = x&nbsp; &nbsp; &nbsp; // x=-900719925474099&nbsp; &nbsp;x=-900719925474099.5 x=-900719925474099.6Math.floor(value) // -900719925474099&nbsp; &nbsp; &nbsp;-900719925474100&nbsp; &nbsp; &nbsp;-900719925474100Math.ceil(value)&nbsp; // -900719925474099&nbsp; &nbsp; &nbsp;-900719925474099&nbsp; &nbsp; &nbsp;-900719925474099Math.round(value) // -900719925474099&nbsp; &nbsp; &nbsp;-900719925474099&nbsp; &nbsp; &nbsp;-900719925474100Math.trunc(value) // -900719925474099&nbsp; &nbsp; &nbsp;-900719925474099&nbsp; &nbsp; &nbsp;-900719925474099parseInt(value)&nbsp; &nbsp;// -900719925474099&nbsp; &nbsp; &nbsp;-900719925474099&nbsp; &nbsp; &nbsp;-900719925474099value | 0&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// -858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-858993459~~value&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// -858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-858993459value >> 0&nbsp; &nbsp; &nbsp; &nbsp; // -858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-858993459&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-858993459value >>> 0&nbsp; &nbsp; &nbsp; &nbsp;//&nbsp; 3435973837&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3435973837&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3435973837value - value % 1 // -900719925474099&nbsp; &nbsp; &nbsp;-900719925474099&nbsp; &nbsp; &nbsp;-900719925474099

回首忆惘然

按位OR运算符按位或运算符可用于截断浮点数,它适用于正数和负数:function float2int (value) {&nbsp; &nbsp; 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&nbsp; | 0 => 123456789012345678901 | 0 => -539222987

ITMISS

注意:您不能Math.floor()用作截断的替代品,因为Math.floor(-3.1) = -4而不是-3!!截断的正确替换将是:function truncate(value){&nbsp; &nbsp; if (value < 0) {&nbsp; &nbsp; &nbsp; &nbsp; return Math.ceil(value);&nbsp; &nbsp; }&nbsp; &nbsp; return Math.floor(value);}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript