【发布时间】:2015-04-10 19:21:54
【问题描述】:
我最近遇到了一种在 C# 中计算表达式的方法,使用数据表对象的计算方法。这是一段代码:
string expression = "330200000*450000";
var loDataTable = new DataTable();
var loDataColumn = new DataColumn("Eval", typeof(double), expression);
loDataTable.Columns.Add(loDataColumn);
loDataTable.Rows.Add(0);
MessageBox.Show(((double)(loDataTable.Rows[0]["Eval"])).ToString());
如果你输入一个像“300 * 2”这样的简单表达式,这将起作用,但是返回大数字的表达式将不起作用,我收到消息:
“对于类型 'Int32',值要么太大要么太小。”
我试图强制类型加倍,但由于某种原因,错误仍然指向有关 Int32 类型的某些内容,我不确定它来自哪里。
小手吗?
【问题讨论】:
-
您在哪一行得到异常?在第 3 行还是第 6 行?顺便说一句:为什么不使用 long 而不是 double?
-
第 4 行出现错误:loDataTable.Columns.Add(loDataColumn);我绝对可以使用 long,但它不会改变任何东西。
-
试着写出数字 3300000D 和 450000D。你需要声明双打像 double myVal = 3D;没有 D,它是一个整数。
-
你为什么将它作为字符串插入?
-
因为这是在wpf的上下文中,用户可以在文本框中输入公式,然后进行计算。