2012-04-04 149 views
12

我有一個函數接收字符串參數並將它們轉換爲整數。
爲了安全轉換,使用了int.TryParse()。int.TryParse()返回false爲「#。##」

public IEnumerable<object> ReportView(string param1, string param2) 
{ 
    int storeId = int.TryParse(param1, out storeId) ? storeId : 0; 
    int titleId = int.TryParse(param2, out titleId) ? titleId : 0; 
    IEnumerable<object> detailView = new Report().GetData(storeId, titleId); 
    return detailView; 
} 

函數調用ReportView(「2」,」 4」 ) - > int.Tryparse成功解析的數字
函數調用ReportView(‘2.00’,」 4.00」 ) - > int.TryParse失敗解析數字

爲什麼?任何想法?

@Update
對不起球員,我的觀念是錯誤的。我是c#的新手,我認爲Int.TryParse()會返回整數部分並忽略小數。但它不會,即使Convert.ToInt32(「字符串」)
感謝所有。

+1

你還應該指定一種文化。 – CodesInChaos 2012-04-04 14:27:25

+4

我不明白爲什麼這是downvoted。這個問題顯然是一個初學者問題,但它很清楚,而且制定得相當完備。 – 2012-04-04 14:29:00

+1

@moguzalp當人們提出一個問題時,人們是否應該因爲不知道某事而被低估? – 2012-04-04 14:37:26

回答

6
public IEnumerable<object> ReportView(string param1, string param2) 
{ 
    decimal tmp; 
    int storeId = decimal.TryParse(param1, out tmp) ? (int)tmp : 0; 
    int titleId = decimal.TryParse(param2, out tmp) ? (int)tmp : 0; 
    IEnumerable<object> detailView = new Report().GetData(storeId, titleId); 
    return detailView; 
} 

以上將使用整數或十進制字符串。請注意,形式爲「2.123」的字符串將導致返回2的整數值。

5

int.TryParse不會嘗試解析字符串並將其轉換爲整數以防萬一。您需要使用decimal.TryParse作爲十進制數字字符串。

2

2.00和4.00不是Integer數據類型 - 這就是爲什麼。如果你想讓它們成爲true,請嘗試double.TryParse()或decimal.TryParse()

1

由於十進制數不是整數,因此無法解析。

1

因爲「2.00」是小數,而不是整數。

2

well 2.00是一個十進制數,而不是計算機眼中的int。

3

2.00和4.00不是整數。如果要分析小數,請使用decimal.TryParse()或double.TryParse(),然後截斷它們或檢查零值尾數。

1

Int32(int)只能包含整數值;因此Int32 Parse/TryParse函數無法解析帶小數的字符串。如果您的字符串值可能包含小數點但旨在表示整數,請使用Decimal.TryParse,然後進行轉換。

2

對於計算機「2.00」是浮點數/小數點,而不是整數。不用做decimal.TryParse(),你可以通過刪除尾部零來預處理字符串,然後執行int.TryParse()。所以如果你有「2.00」,你會繼續檢查(和放下)字符串的最後一個字符,直到到達「。」。 (十進制)。如果它是「0」或「。」你可以放棄它。最後你會以「2」結束。