将字符串转换为双重异常

时间:2014-02-08 20:00:03

标签: c# exception

我是C#的初学者。我正在尝试将string转换为double。以下是方法double.Parse()的代码:

static void Main(string[] args)
{
    string s="0.5";
    double b = double.Parse(s);
    Console.WriteLine("double.Parse() - {0}",b);
}

我也试过了System.Convert.ToDouble()

static void Main(string[] args)
{
    string s="0.5";
    double b = System.Convert.ToDouble(s);
    Console.WriteLine("Convert.ToDouble() - {0}",b);
}

程序以两种方式抛出异常:

  

“输入字符串的格式不正确”。

请帮忙!!!提前谢谢。

3 个答案:

答案 0 :(得分:4)

正如谢尔盖别列佐夫斯基评论的那样,这可能是因为你的机器文化使用的,而不是。作为小数点分隔符。如果你想强迫它使用。 (考虑其含义)您必须使用invariant culture进行解析。在this article的底部有很多关于如何实现这一目标的例子。

答案 1 :(得分:3)

我认为您当前的文化有','作为小数点分隔符,如果是这种情况,请使用“0,5”代替“0.5”或更改分隔符:

var s="0.5";
var culture = CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = ".";
var b = double.Parse(s, culture);

Console.WriteLine("double.Parse() - {0}",b);

试试看,看看它是否修复了它。

答案 2 :(得分:2)

谢尔盖是completely right

Convert.ToDouble methodDouble.Parse method都默认使用CurrentCulture

看起来您当前的文化NumberFormatInfo.NumberDecimalSeparator property不是.,这就是您的代码抛出FormatException的原因。

作为解决方案,您可以在解析之前将代码中的NumberDecimalSeparator设置为.

CultureInfo c = CultureInfo.CurrentCulture;
c.NumberFormat.NumberDecimalSeparator = ".";
double b = Double.Parse(s, c); // Or Convert.ToDouble(s, c)

顺便说一句,使用Convert.ToDouble(String)方法相当于Double.Parse(String)方法。