我發現在SO answer這個代碼,以此來截斷一個數字,在Javascript整數:這是一個截斷數字的有效方法嗎?
var num = -20.536;
var result = num | 0;
//result = -20
這是截斷在Javascript中的一些有效的方法,或者是某種破解的?爲什麼它只適用於小於2147483647的數字?
我發現在SO answer這個代碼,以此來截斷一個數字,在Javascript整數:這是一個截斷數字的有效方法嗎?
var num = -20.536;
var result = num | 0;
//result = -20
這是截斷在Javascript中的一些有效的方法,或者是某種破解的?爲什麼它只適用於小於2147483647的數字?
該方法通過將數字隱式轉換爲32位整數來工作,因爲二進制運算符在其計算中使用32位整數。
這種方法的缺點是:
所需的操作已被隱藏在運營商的隱性影響,所以它是不容易看到的代碼的意圖是什麼。
它只能處理32位數範圍內的整數。
任何一般的情況下,你應該使用Math.floor
或Math.ceil
方法相反,它清楚地表明瞭代碼的意圖是什麼,以及它處理雙精度範圍內的任何數量,即整數高達52位:
var num = 20.536;
var result = Math.floor(num); // 20
var num = -20.536;
var result = Math.ceil(num); // -20
有在Javascript中沒有舍入,向零的方法,所以要做到這一點,你需要四捨五入前檢查就簽收:
var result = num < 0 ? Math.ceil(num) : Math.floor(num);
使用JavaScript的parseInt
像這樣:
var num = -20.536;
var num2int = parseInt(num);
return num2int; //returns -20
田田! num現在是一個值爲-20的整數。
如果使用parseInt
,你可以去從-2^53 + 2^53:
parseInt(-20.536) // -20
parseInt(9007199254740992.1234) // 9007199254740992
爲什麼+/- 2^53?這是因爲JavaScript對浮點數使用64位表示,並使用52位尾數。因此,所有整數值可以精確地表示爲2^53。除此之外,整數是近似值。
[n個2,147,483,647也是計算中的32位有符號整數的最大值。](http://en.wikipedia.org/wiki/2147483647) – epascarello
是的數字必須小於2.147.483.647,因爲整數和浮點範圍重疊但他們不一樣。使用Math.floor()可以將數字截斷爲整數部分,但您仍然有一個浮點數。 –
javascript默認情況下將所有數字存儲爲double。 –