截断在JavaScript /圆整数?(Truncate/round whole number in

2019-07-28 23:31发布

对于剧本我写,我需要显示已圆润了许多,但不是过去,小数或任何东西。 我已经得到到它四舍五入至第三位,但我不知道如何去只是删除小数和一切过去吧,因为它似乎并不像JavaScript有一个substr函数像PHP一样。

任何建议?

Answer 1:

如果你有一个字符串 ,解析它作为一个整数:

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


Answer 2:

特拉维斯Pessetto与mozey的一起回答trunc2功能是唯一正确的答案,考虑如何JavaScript的代表在科学记数法非常小或非常大的浮点数。

例如, parseInt(-2.2043642353916286e-15)将不会正确地分析输入。 而不是返回的0将返回-2

这是正确的(恕我直言最少的疯狂)的方式来做到这一点:

function truncate(number)
{
    return number > 0
         ? Math.floor(number)
         : Math.ceil(number);
}


Answer 3:

我会在这里我的解决方案。 我们可以使用地板时,值大于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


Answer 4:

转换为数字为字符串,并扔掉了小数点后的一切。

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。 字符串中表现不佳相比其他方法。



Answer 5:

使用Math.floor()

var f = 20.536;
var i = Math.floor(f);  // 20

http://jsfiddle.net/J4UVV/1/



Answer 6:

Math.trunc()函数删除所有的小数位。

对于正数,它的行为完全一样Math.floor():

console.log(Math.trunc(89.13349)); // output is 89

对于负数,它的行为一样Math.ceil():

console.log(Math.trunc(-89.13349)); //output is -89


文章来源: Truncate/round whole number in JavaScript?