我想在JavaScript中将浮点数转换为整数。实际上,我想知道如何进行两种标准转换:通过截断和舍入。而且高效,而不是通过转换为字符串和解析。


当前回答

如果您想要向下四舍五入的答案:

var intvalue = Math.floor( floatvalue );
var integer = Math.floor(4.56);
Answer = 4

如果要向上舍入:

var intvalue = Math.ceil( floatvalue );
Answeer would be = 5

其他回答

在您的例子中,当您希望在末尾插入字符串(以便插入逗号)时,也可以只使用Number.toFixed()函数,但这将执行舍入。

比特移位0,等于除以1

// >> or >>>
2.0 >> 0; // 2
2.0 >>> 0; // 2

要截断:

//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.

表演

今天2020.11.28我在Chrome v85、Safari v13.1.2和Firefox v80上对MacOs HighSierra 10.13.6进行了测试,以确定所选的解决方案。

后果

对于所有浏览器,所有解决方案(B和K除外)的速度结果都非常相似解决方案B和K很慢

细节

我执行测试用例,您可以在这里运行

下面的代码片段显示了解决方案之间的差异A.BCDEFGH我JKL

函数A(浮动){return Mathtrunc(浮点);}函数B(浮动){return parseInt(float);}函数C(浮点){返回浮点值|0;}功能D(浮动){return ~~浮点数;}函数E(浮点){返回浮点数>>0;}函数F(浮动){return float-float%1;}函数G(浮动){返回浮点^0;}函数H(浮动){return Math.floor(float);}函数I(浮点){return Math.ceil(浮点);}函数J(浮动){return Math.round(float);}函数K(浮点){return float.toFixed(0);}函数L(浮点){返回浮点>>>0;}// ---------//测试// ---------[A、B、C、D、E、F、G、H、I、J、K、L].forEach(f=>console.log(`${f.name}${f(1.5)}${f(-1.5)}${f(2.499)}${f(-2.499)}`))此代码段仅显示性能测试中使用的函数-它本身不执行测试!

下面是铬的示例结果

函数返回小于或等于给定数字的最大整数。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));