2014-01-15 67 views
1

我發現在SO answer這個代碼,以此來截斷一個數字,在Javascript整數:這是一個截斷數字的有效方法嗎?

var num = -20.536; 
var result = num | 0; 
//result = -20 

這是截斷在Javascript中的一些有效的方法,或者是某種破解的?爲什麼它只適用於小於2147483647的數字?

+3

[n個2,147,483,647也是計算中的32位有符號整數的最大值。](http://en.wikipedia.org/wiki/2147483647) – epascarello

+0

是的數字必須小於2.147.483.647,因爲整數和浮點範圍重疊但他們不一樣。使用Math.floor()可以將數字截斷爲整數部分,但您仍然有一個浮點數。 –

+1

javascript默認情況下將所有數字存儲爲double。 –

回答

3

該方法通過將數字隱式轉換爲32位整數來工作,因爲二進制運算符在其計算中使用32位整數。

這種方法的缺點是:

  • 所需的操作已被隱藏在運營商的隱性影響,所以它是不容易看到的代碼的意圖是什麼。

  • 它只能處理32位數範圍內的整數。

任何一般的情況下,你應該使用Math.floorMath.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); 
+1

'Math.floor()'然而不會截斷負數! 'Math.floor(-20.2324)=== -21' – basilikum

+0

@basilikum:是的,我意識到這一點,並添加了一些示例來展示正面和負面數字的用法,以及適用於兩者的選項。 – Guffa

+0

@Guffa「JavaScript中沒有round-to-zero方法」 - 「parseInt」不計數? – Matt

2

使用JavaScript的parseInt像這樣:

var num = -20.536; 
var num2int = parseInt(num); 

return num2int; //returns -20 

田田! num現在是一個值爲-20的整數。

2

如果使用parseInt,你可以去從-2^53 + 2^53:

parseInt(-20.536) // -20 

parseInt(9007199254740992.1234) // 9007199254740992 

爲什麼+/- 2^53?這是因爲JavaScript對浮點數使用64位表示,並使用52位尾數。因此,所有整數值可以精確地表示爲2^53。除此之外,整數是近似值。

相關問題