我有一个2D的list列表,我正在将其中的一些转换为双打。这在我的PC上可以正常使用,但由于某些原因而使用其他十进制分隔符时失败
try
{
foreach (var line in data)
{
if (line[25] != "")
{
double market_size = Convert.ToDouble(line[25].Replace(",", "."));
if (line[59] != "") Players.Add(new string[] { line[1], line[0], Proper_Name(line[58]), (Convert.ToDouble(line[59].Replace(",", ".")) * market_size).ToString(), market_size.ToString() });
else Players.Add(new string[] { line[1], line[0], "No player", "0", market_size.ToString() });
if (line[61] != "") Players.Add(new string[] { line[1], line[0], Proper_Name(line[60]), (Convert.ToDouble(line[61].Replace(",", ".")) * market_size).ToString(), market_size.ToString() });
else Players.Add(new string[] { line[1], line[0], "No player", "0", market_size.ToString() });
if (line[63] != "") Players.Add(new string[] { line[1], line[0], Proper_Name(line[62]), (Convert.ToDouble(line[63].Replace(",", ".")) * market_size).ToString(), market_size.ToString() });
else Players.Add(new string[] { line[1], line[0], "No player", "0", market_size.ToString() });
if (line[65] != "") Players.Add(new string[] { line[1], line[0], Proper_Name(line[64]), (Convert.ToDouble(line[65].Replace(",", ".")) * market_size).ToString(), market_size.ToString() });
else Players.Add(new string[] { line[1], line[0], "No player", "0", market_size.ToString() });
if (line[67] != "") Players.Add(new string[] { line[1], line[0], Proper_Name(line[66]), (Convert.ToDouble(line[67].Replace(",", ".")) * market_size).ToString(), market_size.ToString() });
else Players.Add(new string[] { line[1], line[0], "No player", "0", market_size.ToString() });
}
}
}
catch (Exception except)
{
MessageBox.Show("Conversion error:" + Environment.NewLine + Environment.NewLine + except.ToString());
this.Close();
}
首先,我认为即使使用逗号而不是圆点也可以,但这不是我的主要问题。就是说,当我得到一个异常错误时,它表明454行是foreach循环开始的地方。 我无法显示该错误消息,因为它是捷克语,但它基本上指出这是第454行的转换错误。
答案 0 :(得分:0)
问题确实出在小数点分隔符上。您的代码假设使用了一个点,但这并不总是正确的。
您可以尝试将字符串转换为选定的分隔符,无论它是什么,都是这样的:
internal static string ReplaceWithDecimalSep(string input)
{
string firstReplace = input.Replace('.', (char)swUserPreferenceStringValue_e.swSeparatorCharacterForDims);
string secondReplace = firstReplace.Replace(',', (char)swUserPreferenceStringValue_e.swSeparatorCharacterForDims);
return secondReplace;
}
然后可以使用类似于以下内容的方式将其安全地转换为double:
internal static double ToLocalCultureDouble(string input)
{
string toConvert = ReplaceWithDecimalSep(input);
double.TryParse(toConvert, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture, out double result);
return result;
}
答案 1 :(得分:0)
是否要在字符串列表中添加一行(例如List<string>
)?哪条线是454?
只要转换不起作用,Convert类就会引发异常。您可以尝试使用double.TryParse()
,它返回true或false。如果您喜欢转换,请尝试Convert.ToDouble(value, System.Globalization.CultureInfo.InvariantCulture)
,如果您已将“,”转换为“”,则该方法在任何文化中均适用。首先。