DataTable.Expression方法不使用C#整数除法

时间:2014-05-27 09:24:08

标签: c# datatable

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。

2 个答案:

答案 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];