xml Convert.ToDouble工作错误

时间:2011-09-21 14:33:23

标签: c# wpf xml c#-4.0

我有一个项目,可以从 xml 文件中读取一些数据 Convert.ToDouble metod工作错误。 它将0.05转换为5。 有没有想法解决这个问题?

这是我的ReadDataFromXml方法:

public static List<double> XmldenTabanDegerleriniOku(string ID)
{

    string ayarDir = System.Environment.CurrentDirectory + "\\Ayarlar";
    string Dosya = ayarDir + "\\YuzeyBoyutlari.xml";
    XmlDocument doc = new XmlDocument();
    doc.Load(Dosya);

    XmlNodeList holList = doc.GetElementsByTagName("HOL");
    List<double> tabanDegerleri = new List<double>();
    foreach (XmlNode node in holList)
    {
        XmlElement holElement = (XmlElement)node;

        if (node.Attributes["ID"].Value == ID) { 
            double uzunluk =Convert.ToDouble(holElement.GetElementsByTagName("uzunluk")[0].InnerText.Replace('.',','));
            double genislik =Convert.ToDouble(holElement.GetElementsByTagName("genislik")[0].InnerText.Replace('.',','));
            double cizgilerArasiMesafe = Convert.ToDouble(holElement.GetElementsByTagName("cizgilerArasiMesafe")[0].InnerText.Replace('.', ','));
            tabanDegerleri.Add(uzunluk);
            tabanDegerleri.Add(genislik);
            tabanDegerleri.Add(cizgilerArasiMesafe);
            break;
        }


    }
    return tabanDegerleri;
}

5 个答案:

答案 0 :(得分:8)

请勿使用Convert.ToDouble:使用XmlConvert.ToDouble。我相信有效地使用了不变文化(因为传递数据的XML文档在这个意义上不应该是文化特定的。)

编辑:我没有注意到你手动替换'。'用',' - 所以当你说“它将0.05转换为5”时,你的意思是“它将0,05转换成5”。您应该使用XmlConvert 自行停止弄乱数据。

答案 1 :(得分:4)

问题

在转换之前,您正在.替换,。这意味着当您获得0.05后,您将其转换为0,05。该转换将根据您的区域设置进行操作。例如,在美国, 5

解决方案

查看@ JonSkeet的答案并使用XmlConvert.ToDouble这是文化不变量(它使用XML标准进行数据格式化)。当然,删除字符串替换。

答案 2 :(得分:2)

您应该使用正确的CultureInfo,而不是用逗号替换点。

您可以使用Convert.ToDouble方法的this签名来执行此操作。类似的东西:

double uzunluk =Convert.ToDouble(holElement.GetElementsByTagName("uzunluk")[0].InnerText, CultureInfo.CurrentCulture);

如果您仍然遇到点和彗星问题,则表示您的Xml文件的文化与当前文化(执行代码行的机器文化)不一致,例如您的Windows安装设置为将逗号作为十进制分隔符(在这种情况下,似乎CurrentCulture是土耳其文化,并且您的xml具有不同的,如美国文化)。在这种情况下,您必须使用xml的实际文化调用Convert,了解它的生成位置。

如果它有点作为十进制分隔符,那么你可以尝试获得常见的不变文化(CultureInfo.InvariantCulture),它确实使用点,或者可能更具体。 (见GetCultureInfo)。

答案 3 :(得分:1)

我注意到您正在将.替换为,

这是否意味着您所处的文化中有小数点而不是小数点?在这种情况下,“0.05”是5.如果你想要分数,那么字符串必须是“0,05”。

答案 4 :(得分:1)

如果在将小数点更改为逗号之前转换值,双转换是否有效?我认为你有一个语言环境问题。