为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

森林海 2019-09-18 11:06:12
我想在JavaScript中将float转换为整数。实际上,我想知道如何同时执行标准转换:截断和舍入。并且有效,而不是通过转换为字符串和解析。
查看完整描述

3 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

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=x        //  x=5          5<x<5.5      5.5<=x<6  


Math.floor(value) //  5            5            5

Math.ceil(value)  //  5            6            6

Math.round(value) //  5            5            6

Math.trunc(value) //  5            5            5

parseInt(value)   //  5            5            5

~~value           //  5            5            5

value | 0         //  5            5            5

value >> 0        //  5            5            5

value >>> 0       //  5            5            5

value - value % 1 //  5            5            5

// value=x        // x=-5         -5>x>=-5.5   -5.5>x>-6


Math.floor(value) // -5           -6           -6

Math.ceil(value)  // -5           -5           -5

Math.round(value) // -5           -5           -6

Math.trunc(value) // -5           -5           -5

parseInt(value)   // -5           -5           -5

value | 0         // -5           -5           -5

~~value           // -5           -5           -5

value >> 0        // -5           -5           -5

value >>> 0       // 4294967291   4294967291   4294967291

value - value % 1 // -5           -5           -5

积极 - 更大的数字

// x = Number.MAX_SAFE_INTEGER/10 // =900719925474099.1


// value=x            x=900719925474099    x=900719925474099.4  x=900719925474099.5


Math.floor(value) //  900719925474099      900719925474099      900719925474099

Math.ceil(value)  //  900719925474099      900719925474100      900719925474100

Math.round(value) //  900719925474099      900719925474099      900719925474100

Math.trunc(value) //  900719925474099      900719925474099      900719925474099

parseInt(value)   //  900719925474099      900719925474099      900719925474099

value | 0         //  858993459            858993459            858993459

~~value           //  858993459            858993459            858993459

value >> 0        //  858993459            858993459            858993459

value >>> 0       //  858993459            858993459            858993459

value - value % 1 //  900719925474099      900719925474099      900719925474099

否定 - 更大的数字

// x = Number.MAX_SAFE_INTEGER/10 * -1 // -900719925474099.1


// value = x      // x=-900719925474099   x=-900719925474099.5 x=-900719925474099.6


Math.floor(value) // -900719925474099     -900719925474100     -900719925474100

Math.ceil(value)  // -900719925474099     -900719925474099     -900719925474099

Math.round(value) // -900719925474099     -900719925474099     -900719925474100

Math.trunc(value) // -900719925474099     -900719925474099     -900719925474099

parseInt(value)   // -900719925474099     -900719925474099     -900719925474099

value | 0         // -858993459           -858993459           -858993459

~~value           // -858993459           -858993459           -858993459

value >> 0        // -858993459           -858993459           -858993459

value >>> 0       //  3435973837           3435973837           3435973837

value - value % 1 // -900719925474099     -900719925474099     -900719925474099



查看完整回答
反对 回复 2019-09-18
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

按位OR运算符

按位或运算符可用于截断浮点数,它适用于正数和负数:


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 按位OR

~~val 按位NOT

parseInt(val)

只适用于正数。在这种情况下,您可以安全地使用按位运算和Math.floor函数。


但是,如果您需要使用代码来处理正数和负数,那么按位运算是最快的(OR是首选运算)。这个其他JSPerf测试比较相同的地方很明显,因为额外的符号检查Math现在是四个中最慢的。


注意

如评论中所述,BITWISE运算符在带符号的32位整数上运算,因此将转换大数字,例如:


1234567890  | 0 => 1234567890

12345678901 | 0 => -539222987


查看完整回答
反对 回复 2019-09-18
?
ITMISS

TA贡献1871条经验 获得超8个赞

注意:您不能Math.floor()用作截断的替代品,因为Math.floor(-3.1) = -4而不是-3!!


截断的正确替换将是:


function truncate(value)

{

    if (value < 0) {

        return Math.ceil(value);

    }


    return Math.floor(value);

}


查看完整回答
反对 回复 2019-09-18
  • 3 回答
  • 0 关注
  • 927 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号