【问题标题】:C#.Net Convert string to double and int handling empty stringC#.Net 将字符串转换为 double 和 int 处理空字符串
【发布时间】:2012-03-16 21:23:34
【问题描述】:

我正在尝试将 _string[1] 转换为 double 并将 _string[2] 转换为 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)

当有空字符串或十进制字符串时,这有时会给我无效的输入

【问题讨论】:

  • 一个空字符串应该如何解析为double?!那应该给什么?
  • 对于空或无效的输入,将双精度解析为 0.00,对于 int 仅解析 0

标签: c# typeconverter string


【解决方案1】:

您可以使用 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 );

以上多行仅作演示。

【讨论】:

  • 谢谢我选择这条路
【解决方案2】:

对于双精度,您可以使用这样的三元运算符

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));

【讨论】:

  • 不幸的是,如果输入不代表有效数字,Convert.ToDouble 将引发异常,而 TryParse 不会。
  • @HaBo。好的我明白了。但是您的代码效率低下。在成功或失败时,您会执行 TryParse 和 Convert.ToDouble,两者都成功或失败。没有意义,您只需要一个 TryParse。
  • 我完全错过了这一点。我认为 TryParse 只会在可以解析的情况下尝试解析并返回一个布尔值。效率低下,但仍然可以工作。
【解决方案3】:

试试这个...

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。

【讨论】:

  • 但我的情况是字符串是否为空?
  • 但是如果失败会抛出异常,你的选择主要取决于你想如何进行错误处理。 String empty 会抛出异常,将这种情况转换为 0 总是需要额外的检查。
  • 不处理空字符串。
  • 改为处理空字符串。
猜你喜欢
  • 2011-06-30
  • 2010-10-20
  • 1970-01-01
  • 2021-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多