我有一个除法的结果,我希望放弃结果数的小数部分。

我该怎么做呢?


当前回答

Math.trunc()和~~去掉小数部分而不影响整数部分。

例如:

console.log(Math.trunc(3.9)) // 3
console.log(~~(3.9)) // 3

其他回答

使用Math.round()函数。

Math.round(65.98) // will return 66 
Math.round(65.28) // will return 65

在ES2015中,Math.trunc()是可用的。

Math.trunc(2.3)                       // 2
Math.trunc(-2.3)                      // -2
Math.trunc(22222222222222222222222.3) // 2.2222222222222223e+22
Math.trunc("2.3")                     // 2
Math.trunc("two")                     // NaN
Math.trunc(NaN)                       // NaN

IE11及以下版本不支持,但在Edge和其他现代浏览器中都可以运行。

还可以使用位运算符来截断小数。

e.g.

var x = 9 / 2;
console.log(x); // 4.5

x = ~~x;
console.log(x); // 4

x = -3.7
console.log(~~x) // -3
console.log(x | 0) // -3
console.log(x << 0) // -3

位操作比Math函数要高效得多。双非位操作符的性能似乎也略优于x | 0和x << 0位操作符,其性能可以忽略不计。

// 952 milliseconds
for (var i = 0; i < 1000000; i++) {
    (i * 0.5) | 0;
}

// 1150 milliseconds
for (var i = 0; i < 1000000; i++) {
    (i * 0.5) << 0;
}

// 1284 milliseconds
for (var i = 0; i < 1000000; i++) {
    Math.trunc(i * 0.5);
}

// 939 milliseconds
for (var i = 0; i < 1000000; i++) {
    ~~(i * 0.5);
}

同样值得注意的是,按位的not运算符优先于算术运算,所以你可能需要用括号来包围计算以得到预期的结果:

x = -3.7

console.log(~~x * 2) // -6
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7

console.log(~~(x * 2)) // -7
console.log(x * 2 | 0) // -7
console.log(x * 2 << 0) // -7

更多关于双位not操作符的信息可以在双位not (~~)

如果不关心舍入,只需将数字转换为字符串,然后删除句号之后的所有内容,包括句号。不管有没有小数点,这个都成立。

const sEpoch = ((+new Date()) / 1000).toString();
const formattedEpoch = sEpoch.split('.')[0];

这是为那些想阻止用户输入十进制数字的人准备的

<input id="myInput" onkeyup="doSomething()" type="number" />

<script>
    function doSomething() {

        var intNum = $('#myInput').val();

        if (!Number.isInteger(intNum)) {
            intNum = Math.round(intNum);
        }

        console.log(intNum);
    }
</script>