我有一个项目,可以从 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;
}
答案 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)
如果在将小数点更改为逗号之前转换值,双转换是否有效?我认为你有一个语言环境问题。