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

问题描述 投票:0回答:15

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

我该怎么做?

javascript math decimal
15个回答
618
投票

你可以使用...

...取决于您想要如何删除小数点。

尚未在所有平台(即 IE)上支持

Math.trunc()
,但您可以同时轻松使用 polyfill

在良好的平台支持下截断小数部分的另一种方法是使用按位运算符(例如

|0
)。对数字使用按位运算符的副作用是它将其操作数视为带符号的 32 位整数,因此删除了小数部分。请记住,这也会破坏大于 32 位的数字。


您可能还谈论浮点运算的小数舍入不准确。

必读 - 每个计算机科学家都应该了解浮点运算


107
投票

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

例如

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

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

const 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

有关双按位非运算符的更多信息可以在双按位非(~~)

找到

您还应该确保您的整数不需要超过 32 位来表示:

const a = 0x100000000 + 0.1; // 4294967296.1
console.log(Math.trunc(a)); // 4294967296
console.log(~~a); // 0


40
投票

您还可以使用

toFixed
显示小数点后的一定位数(此处为 2 位数字),这将返回字符串表示形式:

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


39
投票

你也可以这样做

parseInt(a/b)

19
投票

使用

Math.round()
功能。

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

13
投票

使用

Math.round()

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


11
投票

这是在之前的帖子的帮助下的详细压缩解释:

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

在 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 和其他所有现代浏览器中使用。


3
投票

如果您不关心路由,只需将数字转换为字符串,然后删除句点之后的所有内容(包括句点)。 无论是否有小数点,这都有效。

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

3
投票

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

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


2
投票

toFixed 将表现得像圆形。

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

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

1
投票

这适用于那些想要阻止用户输入小数的人

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

1
投票

在此示例中,我使用

Number.toFixed
Math.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()
静态方法通过删除任何小数位来返回数字的整数部分。


0
投票

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

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

0
投票

let 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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.