xml转换.ToDouble是错误的

本文关键字:错误 ToDouble 转换 xml | 更新日期: 2023-09-27 18:09:19

我有一个项目,从xml文件读取一些数据转换。双重方法工作错误。它将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;
}

xml转换.ToDouble是错误的

不要用Convert.ToDouble,用XmlConvert.ToDouble。我认为这有效地使用了不变文化(因为从这个意义上说,传递数据的XML文档不应该是特定于文化的)。

编辑:我没有注意到你是手工替换'。' with ',' -所以当你说"它将0.05转换为5"时,你的意思是"它将0.05转换为5"。你应该使用XmlConvert ,不要自己乱动数据。

问题

在转换之前,您正在用,替换.。这意味着当你得到0.05时,你把它转换成0,05。该转换将根据您的区域设置进行操作。例如,在美国, 5

的解决方案

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

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

您可以使用Convert.ToDouble方法的此签名来完成此操作。比如:

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

如果你仍然有点和逗号的问题,这意味着你的Xml文件的文化与当前文化不一致(这是执行代码行的机器的文化),例如你的Windows安装设置有逗号作为小数分隔符(在这种情况下,CurrentCulture似乎是土耳其文化,而你的Xml有一个不同的,像美国文化)。在这种情况下,您必须使用xml的实际区域性调用Convert,并了解它是在哪里生成的。

如果它有点作为小数分隔符,那么您可以尝试获得通用不变区域性(CultureInfo.InvariantCulture),它确实使用点,或者可能更具体。(见GetCultureInfo)。

我注意到你正在做一些.,的文本替换。

这是否意味着你所处的文化中有小逗号而不是小数点?在本例中,"0.05"是5。如果你想要分数,字符串必须是"0,05"。

如果在将小数点更改为逗号之前转换值,则双精度转换是否有效?