在C#中将string转换为double
我有一个双值types的string(“value1#value2#value3#…)。我将它拆分为string表。然后我想从这个表中转换一个元素为double,我得到一个错误。错误?我怎么能从这个string(stringa)的双值types的值?
string a = "52.8725945#18.69872650000002#50.9028073#14.971600200000012#51.260062#15.5859949000000662452.23862099999999#19.372202799999250800000045#51.7808372#19.474096499999973#"; string[] tablicaLatLng = a.Split(new char[] { '#' }); for (int i = 0; i < tablicaLatLng.Length; i++) { Console.WriteLine(tablicaLatLng[i]); } Console.WriteLine(tablicaLatLng[0]); // 52.8725945 Convert.ToDouble(tablicaLatLng[0]); // error
如果你的第一个双倍 (如你所要求的):这似乎是与文化有关的问题,试试这个应该工作(replace为,
):
Console.WriteLine(Convert.ToDouble("52,8725945"));
在这种情况下,你应该parsing你的string,例如double.Parse
:
double.Parse("52.8725945", System.Globalization.CultureInfo.InvariantCulture);
另一方面,你在你的string后面有不正确的double。
大多数人已经试图回答你的问题。
如果你还在debugging,你有没有想过使用:
Double.TryParse(String, Double);
这将帮助您确定每个string中的错误,然后再进行实际parsing。
如果你有一个与文化有关的问题,你可以考虑使用:
Double.TryParse(String, NumberStyles, IFormatProvider, Double);
这http://msdn.microsoft.com/en-us/library/system.double.tryparse.aspx有一个很好的例子,如何使用它们。;
如果您需要很长时间,也可以使用Int64.TryParse: http : //msdn.microsoft.com/en-us/library/system.int64.tryparse.aspx
希望有所帮助。
private double ConvertToDouble(string s) { char systemSeparator = Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0]; double result = 0; try { if (s != null) if (!s.Contains(",")) result = double.Parse(s, CultureInfo.InvariantCulture); else result = Convert.ToDouble(s.Replace(".", systemSeparator.ToString()).Replace(",", systemSeparator.ToString())); } catch (Exception e) { try { result = Convert.ToDouble(s); } catch { try { result = Convert.ToDouble(s.Replace(",", ";").Replace(".", ",").Replace(";", ".")); } catch { throw new Exception("Wrong string-to-double format"); } } } return result; }
并成功通过testing:
Debug.Assert(ConvertToDouble("1.000.007") == 1000007.00); Debug.Assert(ConvertToDouble("1.000.007,00") == 1000007.00); Debug.Assert(ConvertToDouble("1.000,07") == 1000.07); Debug.Assert(ConvertToDouble("1,000,007") == 1000007.00); Debug.Assert(ConvertToDouble("1,000,000.07") == 1000000.07); Debug.Assert(ConvertToDouble("1,007") == 1.007); Debug.Assert(ConvertToDouble("1.07") == 1.07); Debug.Assert(ConvertToDouble("1.007") == 1007.00); Debug.Assert(ConvertToDouble("1.000.007E-08") == 0.07); Debug.Assert(ConvertToDouble("1,000,007E-08") == 0.07);
像Public一样添加一个类,像convertToInt32()一样使用它非常简单
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// Summary description for Common /// </summary> public static class Common { public static double ConvertToDouble(string Value) { if (Value == null) { return 0; } else { double OutVal; double.TryParse(Value, out OutVal); if (double.IsNaN(OutVal) || double.IsInfinity(OutVal)) { return 0; } return OutVal; } } }
然后调用函数
double DirectExpense = Common.ConvertToDouble(dr["DrAmount"].ToString());
在你的string,我看到: 15.5859949000000662452.23862099999999
这是不是一个双(它有两个小数点)。 也许这只是一个合法的input错误?
你也可能想弄清楚你的最后一个String
是否为空,并说明这种情况。