如何从JavaScript编号中删除小数部分?

时间:2011-10-03 23:27:58

标签: javascript

我有分组的结果,我希望丢弃结果数字的小数部分。

我该怎么做?

14 个答案:

答案 0 :(得分:302)

你可以使用......

...取决于您想要删除小数的方式。

尚未在所有平台上支持

Math.trunc()(即IE),但在此期间您可以轻松使用polyfill

通过使用bitwise operator(.e.g |0)来截断具有出色平台支持的小数部分的另一种方法。在数字上使用按位运算符的副作用是它将其操作数视为带符号的32位整数,因此删除小数部分。请记住,这也会破坏大于32位的数字。


您可能还在谈论使用浮点运算进行十进制舍入的不准确性。

Required Reading - What Every Computer Scientist Should Know About Floating-Point Arithmetic

答案 1 :(得分:25)

您也可以

parseInt(a/b)

答案 2 :(得分:25)

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

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

按位运算比数学函数更有效。双重非按位运算符似乎也略微优于x | 0x << 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);
}

另外值得注意的是,按位非运算符优先于算术运算,因此您可能需要用括号括起计算以获得预期结果:

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

有关双位按位运算符的详细信息,请参阅Double bitwise NOT (~~)

答案 3 :(得分:12)

使用Math.round()

(Alex的答案更好;我做了一个假设:)

答案 4 :(得分:12)

你也可以使用以下代码在小数点后面显示一定数量的数字(这里是2位数):

var num = (15.46974).toFixed(2)
console.log(num) // 15.47
console.log(typeof num) // string

答案 5 :(得分:11)

例如:

var x = 9.656;
x.toFixed(0);           // returns 10
x.toFixed(2);           // returns 9.66
x.toFixed(4);           // returns 9.6560
x.toFixed(6);           // returns 9.656000 

parseInt("10");         // returns 10
parseInt("10.33");      // returns 10
parseInt("10 20 30");   // returns 10
parseInt("10 years");   // returns 10
parseInt("years 10");   // returns NaN  

答案 6 :(得分:8)

使用Math.round()功能。

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

答案 7 :(得分:5)

使用ES2015,Math.trunc()可用。

Append

在IE11或更低版本中不支持它,但在Edge和其他所有现代浏览器中都可以使用。

答案 8 :(得分:1)

在上述帖子的帮助下,这是压缩的详细解释:

<强> 1。 Math.trunc():用于删除后跟点的数字。它隐含地转换。但是,IE不支持。

示例:

Math.trunc(10.5)// 10

Math.trunc(-10.5)// -10

其他替代方式:使用按位非运算符:

示例:

x = 5.5

~~ x // 5

<强> 2。 Math.floor():它用于给出可用的最小整数值。它在所有浏览器中都受支持。

示例:

Math.floor(10.5)// 10

Math.floor(-10.5)// -11

第3。 Math.ceil():它用于给出可能的最高整数值。它在所有浏览器中都受支持。

示例:

Math.ceil(10.5)// 11

Math.ceil(-10.5)// -10

<强> 4。 Math.round():舍入到最接近的整数。它在所有浏览器中都受支持。

示例:

Math.round(10.5)// 11

Math.round(-10.5)// -10

Math.round(10.49)// 10

Math.round(-10.51)// -11

答案 9 :(得分:1)

您可以使用.toFixed(0)删除完整的小数部分,或在参数中提供您希望截断小数的数字。

注意:toFixed会将数字转换为字符串。

答案 10 :(得分:0)

toFixed将表现得像圆形。

对于像行为一样的地板使用%:

var num = 3.834234;
var floored_num = num - (num % 1); // floored_num will be 3

答案 11 :(得分:0)

对于ES6实现,请使用以下内容:

const millisToMinutesAndSeconds = (millis) => {
  const minutes = Math.floor(millis / 60000);
  const seconds = ((millis % 60000) / 1000).toFixed(0);
  return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
}

答案 12 :(得分: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>

答案 13 :(得分:0)

如果您不关心路由,只需将数字转换为字符串,然后删除句点之后的所有内容,包括句点。不管有没有小数,这都可以。

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