对于我正在编写的脚本,我需要显示一个已经四舍五入的数字,但不包括小数或任何过去的数字。我已经下定决心把它推到第三位,但我不知道如何去掉小数点以及所有的东西,因为它似乎没有像PHP那样的substr
功能。在JavaScript中截取/舍入整数?
有什么建议吗?
对于我正在编写的脚本,我需要显示一个已经四舍五入的数字,但不包括小数或任何过去的数字。我已经下定决心把它推到第三位,但我不知道如何去掉小数点以及所有的东西,因为它似乎没有像PHP那样的substr
功能。在JavaScript中截取/舍入整数?
有什么建议吗?
如果你有一个字符串,解析它作为一个整数:
var num = '20.536';
var result = parseInt(num, 10); // 20
否则,ECMAScript的6报价为Math.trunc
完全一致截断,已经在Firefox提供24+和边缘:
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
如果使用负数表示-20.536,那么您将得到错误的截断结果,因为它会导致-21 http://jsfiddle.net/zL1v5e2k/ – 2014-08-12 14:51:14
转换数为字符串,并扔掉一切小数点后。
trunc = function(n) { return Number(String(n).replace(/\..*/, "")) }
trunc(-1.5) === -1
trunc(1.5) === 1
编辑2013年7月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 /小区方法是略高于更快parseInt和mod。与其他方法相比,字符串表现不佳。
我会在这里添加我的解决方案。我们可以使用地板时,值大于0和小区的时候都小于零:
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
我不明白为什么这个答案是downvoted。这是唯一正确的方法! – BlinkyTop 2014-08-11 06:24:00
特拉维斯Pessetto与mozey的trunc2
功能沿着答案是唯一正确的答案,考虑如何JavaScript以科学记数法表示非常小或非常大的浮点数。例如,parseInt(-2.2043642353916286e-15)
将不会正确解析该输入。它将返回-2
而不是返回0
。
这是正确的(恕我直言最少的疯狂)的方式来做到这一点:
function truncate(number)
{
return number > 0
? Math.floor(number)
: Math.ceil(number);
}
对我来说Math.trunc(-2.2043642353916286e-15)返回零。我已经在https://www.typescriptlang.org/play/中进行了测试 – Devid 2017-09-30 10:09:15
四舍五入和截断2个不同的操作。你想要做什么? – 2013-12-30 02:10:29
'.substring()'绝对是javascript中的一个函数。 – 2016-06-09 16:59:10
**方法被调用'.toFixed()'** – neaumusic 2016-12-16 01:23:04