DataTable dataTable = new DataTable();
dataTable.Columns.Add("", typeof(double));
dataTable.Columns[0].Expression = "(1/3)*3000.00";
DataRow r = dataTable.NewRow();
dataTable.Rows.Add(r);
int result = dataTable.Rows[0][0];
计算出的result
为1000,但我预期为0,因为1/3
= 0且(0)*3000.00
= 0。
答案 0 :(得分:1)
当您将列类型指定为double
时,不会发生整数除法:
DataTable dt = new DataTable();
dt.Columns.Add("X", typeof(int));
dt.Columns.Add("Y", typeof(int));
dt.Columns.Add("R", typeof(int), "X/Y");
dt.Columns.Add("", typeof(double), "R*3000.00");
dt.Columns.Add("test", typeof(double), "(1/3)*3000.00");
DataRow r = dt.NewRow();
r["X"] = 1;
r["Y"] = 3;
dt.Rows.Add(r);
int i = (int)dt.Rows[0]["R"]; //return 0
double d = (double)dt.Rows[0][3]; //return 0.0
double d1 = (double)dt.Rows[0]["test"]; //return 1000.0
答案 1 :(得分:0)
(1/3)*3000.00 = 1000.00
如果您使用以下内容,则会得到您期望的结果:
DataTable dataTable = new DataTable();
dataTable.Columns.Add("", typeof(int));
dataTable.Columns[0].Expression = "(1/3)*1.00";
DataRow r = dataTable.NewRow();
dataTable.Rows.Add(r);
int result = (int)dataTable.Rows[0][0];
请注意,计算结果(1/3)*1.00
= 0.3333 ...,当结果转换为int
时,它变为0
。< / p>
与double
相同的结果是0.3333 ......
DataTable dataTable = new DataTable();
dataTable.Columns.Add("", typeof(double));
dataTable.Columns[0].Expression = "(1/3)*1.00";
DataRow r = dataTable.NewRow();
dataTable.Rows.Add(r);
double result = (double)dataTable.Rows[0][0];