2010-09-21 139 views
0
dr["po_amt"].ToString() = 1,936.10; 

當我嘗試轉換該使用下面的代碼爲int32,C#類型轉換

Convert.ToInt32(dr["po_amt"].ToString()); 

它引發錯誤輸入字符串的不正確的格式。我如何實現這一點

+1

嗯,這是不是一個整數值,所以你不能把它轉換爲整數。你想對價值做什麼? – 2010-09-21 11:37:41

+1

dr [「po_amt」]中的值的類型是什麼?如果是這種情況,將該值轉換爲字符串只是爲了將其解析回它的類型。 – dtb 2010-09-21 11:42:44

回答

0

將其轉換爲雙並將其轉換爲int

int i = (int)Convert.ToDouble("1203.12"); 

作品:-)

9

您試圖將「1,936.10」轉換爲整數。很明顯,不是的整數。您應該將其解析爲浮點數(例如使用decimal.TryParse),然後應用任何想要獲得整數的轉換,如果確實確實需要需要整數。

(我會強烈建議您使用decimal.TryParsefloat.TryParsedouble.TryParse,順便說一句,顯然該字符串表示十進制一些,所以這是最合適的類型使用。)

當轉換爲decimal時,您應該指定不變的文化(如果您位於使用「。」作爲千位分隔符並且「,」作爲小數點分隔符的區域),並且不會顯式指定數字風格,允許數千人。

3

您不能轉換1,936.10爲整數,但你可以將其轉換爲浮動點,然後將它轉換:

(Int32) Convert.ToDouble("1,936.10", CultureInfo.InvariantCulture) 

注意使用CultureInfo,以避免當你在一個語言環境中運行的問題,其中浮點數格式是不同的。

投射浮點數將截斷小數部分。如果你需要圍繞它,你應該在施放之前應用Math.Round()

+0

我認爲這是這種情況的最佳解決方案 – 2010-09-21 11:41:48

+0

除了Skeet對'decimal'是正確的。 – 2010-09-21 12:12:35

0

嘗試解析到浴液從而轉換成的Int32:

var d = float.Parse("1936,10"); 
Convert.ToInt32(d);