对于剧本我写,我需要显示已圆润了许多,但不是过去,小数或任何东西。 我已经得到到它四舍五入至第三位,但我不知道如何去只是删除小数和一切过去吧,因为它似乎并不像JavaScript有一个substr
函数像PHP一样。
任何建议?
对于剧本我写,我需要显示已圆润了许多,但不是过去,小数或任何东西。 我已经得到到它四舍五入至第三位,但我不知道如何去只是删除小数和一切过去吧,因为它似乎并不像JavaScript有一个substr
函数像PHP一样。
任何建议?
如果你有一个字符串 ,解析它作为一个整数:
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
是常见的,并且>>> 0
可以用来获得一个无符号的32位整数:
var num = -20.536;
var result = num | 0; // -20
特拉维斯Pessetto与mozey的一起回答trunc2
功能是唯一正确的答案,考虑如何JavaScript的代表在科学记数法非常小或非常大的浮点数。
例如, parseInt(-2.2043642353916286e-15)
将不会正确地分析输入。 而不是返回的0
将返回-2
。
这是正确的(恕我直言最少的疯狂)的方式来做到这一点:
function truncate(number)
{
return number > 0
? Math.floor(number)
: Math.ceil(number);
}
我会在这里我的解决方案。 我们可以使用地板时,值大于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
转换为数字为字符串,并扔掉了小数点后的一切。
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。 字符串中表现不佳相比其他方法。
使用Math.floor()
var f = 20.536;
var i = Math.floor(f); // 20
http://jsfiddle.net/J4UVV/1/
Math.trunc()函数删除所有的小数位。
对于正数,它的行为完全一样Math.floor():
console.log(Math.trunc(89.13349)); // output is 89
对于负数,它的行为一样Math.ceil():
console.log(Math.trunc(-89.13349)); //output is -89