2

.NET は、DataRow 内の double を間違った形式でフォーマットしているように見えるため、すぐにロードできません。「0.000000001」を保存すると、.NET は「1E-09」である必要があるときに「1E-09.0」として保存します。そのため、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