为什么我的解析Double值不对?

时间:2013-04-27 12:32:54

标签: c#

我试图将字符串解析为Double。 这是我的代码:

string a = "10.23";
double b = Double.Parse(a);

但是b是1023.0,我不知道为什么。我想得到10.23作为双重

3 个答案:

答案 0 :(得分:9)

由于您的文化设置,您可以为Parse方法指定文化以获得所需的输出:

string a = "10.23";
double b = double.Parse(a, System.Globalization.CultureInfo.InvariantCulture);
// b == 10.23

答案 1 :(得分:9)

在德国,逗号(,)用作小数点,而大多数英国文化和您的示例使用句号(.)作为小数点。由于Double.Parse使用线程默认文化来解析数字,并且线程默认文化设置为德语,因此结果错误。

您应该明确指定文化:

using System.Globalization;

string a = "10.23";
double b = Double.Parse(a, CultureInfo.InvariantCulture);

不变文化使用句号作为小数点,所以我建议你改用它。或者,如果您从已知使用特定文化习俗编写的来源获取字符串,请改用该文化。

答案 2 :(得分:1)

或者您的数字格式化位置,请尝试以下来源:

分机:

 public static class Ext
{

    public static double? AsLocaleDouble(this string str)
    {
        var result = double.NaN;
        var format = Thread.CurrentThread.CurrentUICulture.NumberFormat;

        double.TryParse(str, NumberStyles.AllowDecimalPoint, format, out result);

        return result;
    }
}

测试:

  class Program
{
    static void Main(string[] args)
    {
        var str = "10,23";

        Thread.CurrentThread.CurrentUICulture = new CultureInfo("uz-Cyrl-UZ");
        Thread.CurrentThread.CurrentCulture = new CultureInfo("uz-Cyrl-UZ");

        Console.WriteLine(str.AsLocaleDouble());

        Console.ReadKey(); 
    }
}