2010-01-24 68 views
20

我要截斷在JavaScript的數字,這意味着切去小數部分:JavaScript的TRUNC()函數

TRUNC(2.6)== 2

TRUNC(-2.6)= = -2


基準我的回答後重是:

function trunc (n) { 
    return ~~n; 
} 

// or  

function trunc1 (n) { 
    return n | 0; 
 } 
+0

http://jsperf.com/truncate-0 – Dan

+5

注意,按位方法快(例如,~~ n或n | 0)僅適用於最多2^31-1或2147483647的數字。2147483648或更高版本將返回不正確的結果;例如,2147483647 | 0返回-2147483648和4294967295 | 0返回-1,這幾乎絕對不是您想要的 –

回答

34

作爲除@Daniel的答案,如果你想一直向零取整,您可以:

function truncate(n) { 
    return n | 0; // bitwise operators convert operands to 32-bit integers 
} 

或者:

function truncate(n) { 
    return Math[n > 0 ? "floor" : "ceil"](n); 
} 

兩個會給你兩個,正確的結果正數和負數:

truncate(-3.25) == -3; 
truncate(3.25) == 3; 
+0

http://jsperf.com/javascript-trunc – Dan

13

對於正數:

Math.floor(2.6) == 2; 

對於負數:

Math.ceil(-2.6) == -2; 
10

您可以使用toFixed方法還允許指定要顯示十進制數的數量:

var num1 = new Number(3.141592); 
var num2 = num1.toFixed(); // 3 
var num3 = num1.toFixed(2); // 3.14 
var num4 = num1.toFixed(10); // 3.1415920000 

只需注意toFixed回合數:

var num1 = new Number(3.641592); 
var num2 = num1.toFixed(); // 4 
+1

舍入意味着它不會被截斷。還要注意,toFixed返回一個字符串 –

4

我用

function trunc(n){ 
    return n - n % 1; 
} 

,因爲它工作在整個浮動範圍,應該(不計)比

function trunc(n) { 
    return Math[n > 0 ? "floor" : "ceil"](n); 
} 
+0

輝煌!你的方式只是稍微快一點,但它更緊​​湊,這也會對性能產生影響。更好的是,我不必使用函數調用,我可以嵌入(n - n%1)內聯!我一直在使用(n | 0),但只適用於低於32位大小的數字,而不是完整的64位浮點範圍。我從現在開始使用它,謝謝! –