2016-09-13 205 views
7

JavaScript函數parseInt可用於強制給定參數的轉換爲整數使用parseInt函數()時,即參數是否是一個字符串,浮點數,號碼等打字稿:錯誤多項

在JavaScript中,parseInt(1.2)會產生1沒有錯誤,但是,在打字稿,它在編譯過程中拋出一個錯誤說:

error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'. 

我失去了一些東西在這裏或者是從打字稿預期的行爲?

+7

是的,這是雅的類型檢查! –

+0

嘗試'parseInt(「」+ 1.2 +「」)' – Mojtaba

+0

'parseInt([2,3])'返回'2'但這並不意味着你應該這樣做... –

回答

11

不要使用parseInt做此操作 - 使用Math.floor

使用parseIntfloor一個數字並不總是會產生正確的結果。 parseInt(4e21)返回4,而不是4e21parseInt(-0)返回0,而不是-0

+0

我不認爲這是正確的方式。這將產生一個沒有小數部分的浮點數。但它實際上不是一個整數。例如,如果將其除以整數,您將會得到一個浮點數。 – cosmozhang

+0

問題要求'string |數字''Math.floor()'只需要'數字',這樣也不起作用。 其中一個答案建議'數字()'哪些工作,但可能留給你一個小數位的數字。 'Math.floor(Number(stringOrNumber))'似乎是一個明智的選擇,但'parseInt(「」+ row.c,10)'似乎有些可以接受。 – Forbesmyester

4

功能parseInt的確在第一個參數中預期爲string。請檢查the documentation。通常您可以省略第二個參數radix,然後它將回落到默認值10。但最安全的是始終將數字系統基礎添加爲第二個參數(通常爲10)。

如果您想一個一般價值number,您可以使用Number功能,像這樣。

var myNumber = Number(myGeneralValue); 
2

看打字:

parseInt(string: string, radix?: number): number; 
        ^^^^^^ 

的第一個參數必須是一個字符串。這是符合規格:

parseInt (string , radix)
parseInt函數產生根據指定基數通過的參數的內容解釋系列所確定的整數值。

在正常的JS,第一個參數被強制轉換爲字符串的基礎上,規範了以下規則:

  1. inputString是的ToString()。

這就是爲什麼parseInt(1.2)有效。

注意,規範允許基數undefined,這是一樣的,在簽名的radix?: number部分省略它,因此問號。在這種情況下,當然,它默認爲10(除非字符串看起來像0xabc)。

正如其他答案中所提到的,parseInt不是最好的解決方案,無論如何,如果你真的想要做的是樓層或截斷操作。

2

爲什麼你會在這種情況下使用parseInt?只需使用Math.floorMath.ceil即可。 parseInt需要一個字符串作爲參數而不是數字。因此,您的錯誤

1

當'Math.floor'和'parseInt'之間的負數有不同的表現形式。

你應該使用這個: 1.2 | 0

或(1.2).toFixed(0)