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

我该怎么做呢?


当前回答

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

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 (~~)

其他回答

你可以用…

Math.trunc()(截断小数部分,也见下文) Math.floor()(向下舍入) Math.ceil()(取整) Math.round()(四舍五入到最接近的整数)

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

Math.trunc()尚未在所有平台(即IE)上得到支持,但您可以在此期间轻松使用polyfill。

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


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

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

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

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 (~~)

使用Math.round()。

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

在这个例子中,我使用Number。固定和数学。trunc方法:

const num = 1.234

Number(num.toFixed(0)); // Returns 1
Number(num.toFixed(2)); // Returns 1.23

Math.trunc(num); // Returns 1

toFixed()方法使用定点表示法格式化数字。 Math.trunc()静态方法通过删除任何小数来返回数字的整数部分。

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

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