2012-03-16 72 views
1

我试图转换_string [1]至一倍_string [2] INTC#.NET将字符串转换为加倍和int处理空字符串

是动态生成的这个字符串数组。

字符串值可以为空或1.1或1或.1 我该如何处理这个问题。

我想这样做。

string locale; 
locale = System.Web.HttpContext.Current.Request.UserLanguages[0]; 
CultureInfo culture; 
culture = new CultureInfo(locale); 
double cValue = Double.Parse(_string[1], culture.NumberFormat) 
int sValue = Int32.Parse(_string[2], culture.NumberFormat) 

这个时候再给我打无效的输入时出现空字符串或十进制字符串

+0

应该如何将一个空字符串解析为双重?!应该给予什么? – 2012-03-16 21:25:25

+0

为空或无效输入分析双重0.00和INT只是0 – HaBo 2012-03-16 21:26:33

回答

5

对于双您可以使用三元运算符这样

double d = Double.TryParse(_string[1], out d) ? Convert.ToDouble(_string[1]) : 0; 

为了使其安全,你既可以使用一个try-catch或Double.TryParse方法,它是一个更好的选择。

如果你想显示这个,你会得到0作为输出。你可以把它变成一个0.00用下面的行

string output = (String.Format("{0:0.00}", cValue)); 
+0

这一个更好 – HaBo 2012-03-16 22:15:04

+0

不幸的是,如果输入不代表有效数字,Convert.ToDouble将抛出异常,而TryParse则不会。 – Phil 2012-03-16 23:01:32

+0

TryParse返回一个布尔值。 – Phil 2012-03-17 08:42:57

0

尝试......

double cValue = 0.0; 
int sValue = 0; 

if(!String.IsNullOrEmpty(_string[1])) 
{ 
    cValue = Convert.ToDouble(_string[1]); 
} 

if (!String.IsNullOrEmpty(_string[2])) 
{ 
    sValue = Convert.ToInt32(_string[2]); 
} 

http://msdn.microsoft.com/en-us/library/zh1hkw6k.aspx

如果字符串为空或清空不会尝试转换它。它只会是0.0或0.

+0

但我的情况是如果字符串是空的? – HaBo 2012-03-16 21:34:58

+0

但是如果失败,它会抛出一个异常,你的选择主要取决于你想如何做错误处理。空字符串会抛出异常,将该情况转换为0将始终需要额外的检查。 – MrFox 2012-03-16 21:38:50

+0

不处理空字符串。 – Jonathan 2014-11-18 20:16:56

6

您可以使用double.TryParse。

// There's no need to initialize cValue since it's used as an 
// out parameter by TryParse which guarantees initialization. 
// If TryParse fails the output parameter will be set it to 
// default(T), where T is double in this case, i.e. 0. 

double cValue; 

if(Double.TryParse(line[8], out cValue)) 
{ 
    // success (cValue is now the parsed value) 
} 
else 
{ 
    // failure (cValue is now 0) 
} 

,或者如果你需要指定文化

if(double.TryParse(line[8], NumberStyles.Any, CultureInfo.CurrentCulture, out cValue)) 
{ 
} 

如果你真的想成为简洁,那么你可以简单地使用:

double cValue; 
Double.TryParse(line[8], out cValue); 

上面多余的行只是为示范。

+0

谢谢我选择这种方式 – HaBo 2012-03-16 21:45:00