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

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

我该怎么做呢?

546588 次浏览

你可以用…

取决于你想怎么去除小数点。

Math.trunc()还不是所有平台(即IE)都支持,但同时你可以很容易地使用polyfill

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


你可能还在谈论浮点算术小数舍入的不准确性。

必读书目-每个计算机科学家都应该知道浮点运算

使用Math.round()

(亚历克斯的回答更好;我做了一个假设:)

你也可以

parseInt(a/b)

使用Math.round()函数。

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

U还可以显示小数点后(这里是2位数)的特定数字,使用以下代码:

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

固定的会像圆的一样。

对于类似地板的行为使用%:

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

在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和其他现代浏览器中都可以运行。

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

如。

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 | 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);
}

同样值得注意的是,按位的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 (~~)找到

对于ES6实现,使用如下代码:

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

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

1. Math.trunc ():用于移除后面跟点的数字。它隐式地转换。但是,在IE中不支持。

例子:

Math.trunc(10.5) // 10

Math.trunc(-10.5) // -10

其他可选方式:按位not操作符的使用:

例子:

x = 5.5

~~x // 5

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

例子:

Math.floor(10.5) // 10

数学。楼层(-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

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

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

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

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

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

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

例如:

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

Math.trunc()~~删除了decimal part,对integer part没有任何影响。

例如:

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