对于我正在编写的脚本,我需要显示一个四舍五入的数字,而不是小数点或任何超过它的数字。我已经开始将它四舍五入到第三位,但我不确定如何只删除小数点和超过它的所有内容,因为 JavaScript 似乎没有substr
PHP 那样的功能。
有什么建议吗?
对于我正在编写的脚本,我需要显示一个四舍五入的数字,而不是小数点或任何超过它的数字。我已经开始将它四舍五入到第三位,但我不确定如何只删除小数点和超过它的所有内容,因为 JavaScript 似乎没有substr
PHP 那样的功能。
有什么建议吗?
如果您有一个 string,请将其解析为整数:
var num = '20.536';
var result = parseInt(num, 10); // 20
如果你有数字,ECMAScript 6 提供Math.trunc
了完全一致的截断,已经在 Firefox 24+ 和 Edge 中可用:
var num = -2147483649.536;
var result = Math.trunc(num); // -2147483649
如果你不能依赖它并且总是有一个正数,你当然可以使用Math.floor
:
var num = 20.536;
var result = Math.floor(num); // 20
最后,如果 [−2147483648, 2147483647] 中有一个数字,则可以使用任何位运算符将其截断为 32 位。| 0
很常见,>>> 0
可用于获取无符号 32 位整数:
var num = -20.536;
var result = num | 0; // -20
trunc2
考虑到 JavaScript 如何以科学计数法表示非常小的或非常大的浮点数,Travis Pessetto 的答案以及 mozey 的函数是唯一正确的答案。
例如,parseInt(-2.2043642353916286e-15)
不会正确解析该输入。0
它不会返回,而是返回-2
。
这是正确的(也是最不疯狂的)方法:
function truncate(number)
{
return number > 0
? Math.floor(number)
: Math.ceil(number);
}
我将在这里添加我的解决方案。我们可以在值大于 0 时使用 floor,当它们小于零时使用 ceil:
function truncateToInt(x)
{
if(x > 0)
{
return Math.floor(x);
}
else
{
return Math.ceil(x);
}
}
然后:
y = truncateToInt(2.9999); // results in 2
y = truncateToInt(-3.118); //results in -3
注意:这个答案是在Math.trunc(x)
相当新的时候写的,很多浏览器都不支持。今天,现代浏览器支持Math.trunc(x)
.
将数字转换为字符串并丢弃小数点后的所有内容。
trunc = function(n) { return Number(String(n).replace(/\..*/, "")) }
trunc(-1.5) === -1
trunc(1.5) === 1
编辑 2013-07-10
正如 minitech 所指出的,再三考虑,字符串方法似乎有点过分。因此,比较此处和其他地方列出的各种方法:
function trunc1(n){ return parseInt(n, 10); }
function trunc2(n){ return n - n % 1; }
function trunc3(n) { return Math[n > 0 ? "floor" : "ceil"](n); }
function trunc4(n) { return Number(String(n).replace(/\..*/, "")); }
function getRandomNumber() { return Math.random() * 10; }
function test(func, desc) {
var t1, t2;
var ave = 0;
for (var k = 0; k < 10; k++) {
t1 = new Date().getTime();
for (var i = 0; i < 1000000; i++) {
window[func](getRandomNumber());
}
t2 = new Date().getTime();
ave += t2 - t1;
}
console.info(desc + " => " + (ave / 10));
}
test("trunc1", "parseInt");
test("trunc2", "mod");
test("trunc3", "Math");
test("trunc4", "String");
结果可能因硬件而异,如下所示:
parseInt => 258.7
mod => 246.2
Math => 243.8
String => 1373.1
Math.floor / ceil 方法比 parseInt 和 mod 稍快。与其他方法相比,String 的性能确实很差。
Math.trunc()函数删除所有小数位数。
对于正数,它的行为与 Math.floor() 完全相同:
console.log(Math.trunc(89.13349)); // output is 89
对于负数,它的行为与 Math.ceil() 相同:
console.log(Math.trunc(-89.13349)); //output is -89