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;
}
不要用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"。
如果在将小数点更改为逗号之前转换值,则双精度转换是否有效?