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


当前回答

表演

今天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)}`))此代码段仅显示性能测试中使用的函数-它本身不执行测试!

下面是铬的示例结果

其他回答

要截断:

//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)}`))此代码段仅显示性能测试中使用的函数-它本身不执行测试!

下面是铬的示例结果

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

我只想指出,在金钱上,你想要圆,而不是截断。因为4.999452*100四舍五入会给你5,一个更具代表性的答案,所以少一分钱的可能性要小得多。

最重要的是,不要忘了银行家的舍入,这是一种抵消直接舍入带来的轻微正偏差的方法——您的金融应用可能需要它。

JavaScript中的高斯/银行家舍入

如果查看JavaScript中的本机Math对象,您将得到一系列处理数字和值等的函数。。。

基本上,你想做的是非常简单的,并且是JavaScript中的原生代码。。。

假设您有以下数字:

const myValue = 56.4534931;

现在,如果您想将其舍入到最接近的数字,只需执行以下操作:

const rounded = Math.floor(myValue);

你会得到:

56

如果要将其舍入到最接近的数字,只需执行以下操作:

const roundedUp = Math.ceil(myValue);

你会得到:

57

此外,Math.round将其舍入为更高或更低的数字取决于哪个更接近flot数。

此外,还可以在浮点数后面使用~~,这会将浮点数转换为整数。

你可以像~~myValue一样使用它。。。