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


当前回答

双位not运算符可用于截断浮点数。您提到的其他操作可通过Math.floor、Math.ceil和Math.round获得。

> ~~2.5
2
> ~~(-1.4)
-1

更多细节由詹姆斯·帕多尔西提供。

其他回答

您可以使用parseInt方法进行无舍入。由于0x(十六进制)和0(八进制)前缀选项,请小心用户输入。

var intValue = parseInt(floatValue, 10);

编辑:作为警告(来自注释部分),请注意某些数值将被转换为指数形式,如1e21,这将导致“1”的十进制表示不正确

注意:不能使用Math.floor()代替truncate,因为Math.floof(-3.1)=-4而不是-3!!

truncate的正确替换为:

function truncate(value)
{
    if (value < 0) {
        return Math.ceil(value);
    }

    return Math.floor(value);
}

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

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

如果要向上舍入:

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

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

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

JavaScript中的高斯/银行家舍入

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