2014-03-13 69 views
4

在C#中,爲什麼不能int.TryParse解析數字分組(但double.TryParse可以)?爲什麼不能int.TryParse解析數字分組(但double.TryParse可以)?

 int i1 = 13579; 
     string si1 = i1.ToString("N0"); //becomes 13,579 
     int i2 = 0; 
     bool result1 = int.TryParse(si1, out i2); //gets false and 0 

     double d1 = 24680.0; 
     string sd1 = d1.ToString("N0"); //becomes 24,680 
     double d2 = 0; 
     bool result2 = double.TryParse(sd1, out d2); //gets true and 24680.0 

???

回答

3

因爲兩種數據類型的轉換因子都不相同。在字符串值中分配的參數將不同於這兩種數據類型。

在Int.TryParse

不包含培養特定千個在變換參數的形式參數

例如

在Int.TryParse參數的形式是

[ws][sign]digits[ws] 

ws: White space (optional) 
sign: An optional Sign (+-) 
digit: sequance of digit (0-9) 

和在Decimal.TryParse中參數的形式是

[ws][sign][digits,]digits[.fractional-digits][ws] 

ws: White space (optional) 
sign: An optional Sign (+-) 
digit: sequance of digit (0-9) 
,: culture specific thousand separator 
.: culture specific decimal point. 
fractional-digits: fractional digit after decimal point. 

您可以從msdn中獲得更多信息。 Int.TryParseDecimal.TryParse

5

您必須指定允許的NumberStyles,在將字符串解析回數字時需要考慮這一點。

確定傳遞給整數和浮點數值類型的Parse和TryParse方法的數字字符串參數中允許的樣式。

這將返回true並存儲在i2預期數量:

bool result1 = int.TryParse(si1, 
    NumberStyles.AllowThousands, CultureInfo.CurrentCulture.NumberFormat, out i2); 

你也可能想看看其他NumberStyles選項。例如,NumberStyles.Number允許數千以及小數點,空白等


int.TryParse缺省值(如果沒有指定)是NumberStyles.Integer,它允許只有前導符號,以及前緣和後白空間。

double.TryParse的默認值爲NumberStyles.Float| NumberStyles.AllowThousands,它允許前導符號和空格,但也允許前導符號和小數點。

相關問題