2

.NET 看起来它正在以错误的格式格式化 DataRow 中的双精度,所以我无法立即加载它。如果我存储“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"]); 
4

0 回答 0