.NET DataTable中的双重存储?

时间:2014-04-15 08:04:50

标签: c# datatable double numeric-conversion

.NET看起来像是以错误的格式在DataRow中格式化double,所以我无法在第二时刻加载它。如果我存储“0.000000001”,则.NET将其存储为“1E-09.0”,当它应为“1E-09”时。所以Convert.ToDouble(“1E-09.0”)返回一个FormatException。 这是我使用的代码:

// create table
DataTable t = new DataTable("test");
t.Columns.Add("FirstInt", typeof(int));
t.Columns.Add("SecondDouble", typeof(double));
t.Columns.Add("ThirdInt", typeof(int));

// create row data
object[] data = new object[] { 10, 0.000000001, 10 };

// add row data: "0.000000001" is stored as "1E-09.0"
t.Rows.Add(data);

// FormatException is thrown here, since "1E-09.0" should be "1E-09"
double d2 = Convert.ToDouble(t.Rows[0]["SecondDouble"]); 

我也尝试使用强制转换,但代码会抛出“InvalidCastException”。 Double.Parse不起作用。

解决方案:

// create table
DataTable t = new DataTable("test");
t.Columns.Add("FirstInt", typeof(int));
t.Columns.Add("SecondDouble", typeof(string)); // convert double to string
t.Columns.Add("ThirdInt", typeof(int));

// create row data and convert value to string
double value = 0.0000000001;
string valueString = value.ToString("F9");
object[] data = new object[] { 10, valueString, 10 };
t.Rows.Add(data);

// load data
double d2 = Convert.ToDouble(t.Rows[0]["SecondDouble"]); 

0 个答案:

没有答案